我可以在JUnit失败原因中替换变量吗?

时间:2016-03-20 04:59:44

标签: 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));

1 个答案:

答案 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。您可以根据需要使测试变得复杂,并将描述描述为所需的描述。