在log4j中,我可以这样做:
logger.debug("Logging in user {} with birthday {}", user.getName(), user.getBirthdayCalendar());
我可以在JUnit失败原因中做这样的事情吗?
assertTrue("Got {}, but expected {}", StringUtils.equals(bmf.toString(), finalMessage));
答案 0 :(得分:2)
Hamcrest游行者就是你所需要的。
assertThat(bmf.toString(), is(finalMessage));
这将打印出
等失败消息Expected "apples" but got "oranges".
修改强>
Hamcrest风格匹配器的强大功能来自于编写自己的风格。
例如,在测试类中,您可以添加一个方法:
private Matcher<BMF> stringsTo(final String desired) {
return new TypeSafeMatcher<BMF>() {
protected boolean matchesSafely(BMF item) {
return item.toString().equals(desired);
}
public void describeTo(Description description) {
description.appendText("should stringify as ").appendValue(desired);
}
protected describeMismatchSafely(BMF item, Description description) {
description.appendText(" was ").appendValue(item.toString());
}
}
}
然后您可以在测试方法中使用它:
@Test
public void myTest() {
assertThat(bmf, stringsTo(finalMessage));
}
您没有测试bmf对象是否等于字符串;您正在测试bmf属于类BMF
,是非空的,并且当调用toString()
时,它会生成finalMessage
。您可以根据需要使测试变得复杂,并将描述描述为所需的描述。