[我正在使用Java库Hamcrest编写测试,并且它的非流畅API使得当复杂表达式演化时,无法推理表达式类型,例如:
.andExpect(JsonUnitResultMatchers.json()
.matches(CoreMatchers.anyOf(CoreMatchers.allOf(
JsonMatchers.jsonPartEquals("id", "123"),
JsonMatchers.jsonPartEquals("name", "test")))))
是否总是有TRUE匹配器转储当前活动表达式的类型和值?喜欢:
.andExpect(JsonUnitResultMatchers.json()
.matches(CoreMatchers.anyOf(CoreMatchers.allOf(
Slf4jMatcher.logType(),
Slf4jMatcher.logTypeAndToString(),
ConsumerMatcher.apply(System.out::println),
JsonMatchers.jsonPartEquals("id", "123"),
JsonMatchers.jsonPartEquals("name", "test")))))
我不喜欢使用调试器进入Hamcrest代码。深入研究某人的内部是无用的。
我想到了丑陋的人:
.andExpect(JsonUnitResultMatchers.json()
.matches(Matchers.hasItem(CoreMatchers.allOf(
new BaseMatcher() {
@Override
public boolean matches(Object item) {
log.info("type: {}", item.getClass());
log.info("toString: {}", item.toString());
return true;
}
@Override
public void describeTo(Description description) {}
},
JsonMatchers.jsonPartEquals("id", "123"),
JsonMatchers.jsonPartEquals("name", "test")))))
我希望有一些有趣的DSL ...