如果我有以下课程:
public class MyTest
{
@Test
public void testSomething()
{
Something myData = new Something();
testAccordingToData(myData);
}
@Test
public void testSomethingElse()
{
Something myOtherData = new Something("something else");
testAccordingToData(myOtherData);
}
private void testAccordingToData(Something someData)
{
assertTrue(somedata.someField);
assertEquals(someData.someField, someData.someOtherField);
//and various other assertions based on someData
}
}
testAccordingToData()
中的断言是否正常工作,或只能从使用@Test
注释的方法调用断言?
答案 0 :(得分:3)
junit“断言”只是简单的方法调用。他们可以从任何地方打电话。
答案 1 :(得分:3)
这是Assert中最复杂的链。您可以看到它与注释无关,它会抛出一个AssertionError,这并不奇怪,因为这是断言失败时的作用。
static public void assertEquals(String message, Object expected,
Object actual) {
if (equalsRegardingNull(expected, actual)) {
return;
} else if (expected instanceof String && actual instanceof String) {
String cleanMessage = message == null ? "" : message;
throw new ComparisonFailure(cleanMessage, (String) expected,
(String) actual);
} else {
failNotEquals(message, expected, actual);
}
}
检查
private static boolean equalsRegardingNull(Object expected, Object actual) {
if (expected == null) {
return actual == null;
}
return isEquals(expected, actual);
}
呼叫失败
static private void failNotEquals(String message, Object expected,
Object actual) {
fail(format(message, expected, actual));
}
调用
static public void fail(String message) {
if (message == null) {
throw new AssertionError();
}
throw new AssertionError(message);
}
答案 2 :(得分:1)
创建自定义断言方法并不常见,但通常很明智。通常将方法命名为assertFoo
。
现在,人们可以创建一个自定义的Hamcrest匹配器。
最后,您在上面评论过想要查看所有失败断言的结果。在这种情况下,JUnit 4.8及更高版本为您提供了解决方案。查看ErrorCollector @Rule
。