【发布时间】:2013-05-21 10:18:35
【问题描述】:
我有一些课(比如,Entity)。
我希望能够
- 测试该实例是否“有效”,使用一些自定义代码来确定
- 还要测试一个实例是否无效,最好使用相同的代码。
使用 maven、surefire、JUnit 4.11(以及随附的 hamcrest 内容)。
所以我写了一个类似这样的类
class IsValidEntity extends TypeSafeMatcher<Entity>{
@Override public boolean matchesSafely(Entity e){
// and here I do a bunch of asserts...
assertNotNull(e.id);
// etc.
}
@Override
public void describeTo(Description description) {
description.appendText("is valid entity");
}
@Factory
public static <T> Matcher<Entity> validEntity() {
return new IsValidEntity();
}
}
好吧,那我可以了
assertThat(entity, is(validEntity());
在 JUnit 测试中,桃色。
但我做不到
assertThat(entity, not(validEntity());
因为validEntity 因断言损坏而失败,而我认为它应该只是return false。
显然我在这里做一些倒退的事情,但我不确定做这些自定义匹配器的最聪明的方法是什么。或者也许我根本不应该使用TypeSafeMatcher,而是做一些不同的事情?
【问题讨论】:
标签: java unit-testing junit hamcrest