Java 我可以在JUnit失败原因中替换变量吗?
在log4j中,我可以这样做:Java 我可以在JUnit失败原因中替换变量吗?,java,unit-testing,junit,Java,Unit Testing,Junit,在log4j中,我可以这样做: logger.debug("Logging in user {} with birthday {}", user.getName(), user.getBirthdayCalendar()); 我可以在JUnit失败原因中这样做吗 assertTrue("Got {}, but expected {}", StringUtils.equals(bmf.toString(), finalMessage)); 汉克雷斯特游行者是你在这里需要的 assertThat
logger.debug("Logging in user {} with birthday {}", user.getName(), user.getBirthdayCalendar());
我可以在JUnit失败原因中这样做吗
assertTrue("Got {}, but expected {}", StringUtils.equals(bmf.toString(), finalMessage));
汉克雷斯特游行者是你在这里需要的
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());
}
}
}
您没有测试bmf对象是否等于字符串;您正在测试bmf是否属于类
bmf
,是否非空,并且当对其调用toString()
时,它会生成finalMessage
。您可以根据需要使测试变得复杂,并根据需要进行描述性描述。这里需要的是Hamcrest marchers
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());
}
}
}
您没有测试bmf对象是否等于字符串;您正在测试bmf是否属于类
bmf
,是否非空,并且当对其调用toString()
时,它会生成finalMessage
。您可以根据需要使测试变得复杂,并根据需要对其进行描述。这似乎无关紧要。OP所要做的就是使用assertEquals而不是assertTrue,不需要hamcrest。@Nathanhues:我在某种程度上同意你的观点,但对于为什么它不是等效的,有稍微好一点的信息实际上是非常有益的。@Nathanhues奇怪的是,我用了这么多hamcrest,我甚至忘记了assertEquals的存在!Hamcrest matchers的强大功能来自于您自己编写的功能,它可以使用正在测试的参数,并从参数中构造您自己的自定义失败消息。@AJNeufeld:在这里添加这一点很酷。此外,如果OP只想在格式字符串之后指定args,则始终存在string.format。这似乎不相关。OP所要做的就是使用assertEquals而不是assertTrue,不需要hamcrest。@Nathanhues:我在某种程度上同意你的观点,但对于为什么它不是等效的,有稍微好一点的信息实际上是非常有益的。@Nathanhues奇怪的是,我用了这么多hamcrest,我甚至忘记了assertEquals的存在!Hamcrest matchers的强大功能来自于您自己编写的功能,它可以使用正在测试的参数,并从参数中构造您自己的自定义失败消息。@AJNeufeld:在这里添加这一点很酷。此外,如果OP只想在格式字符串之后指定args,则始终存在string.format