我有一些像这样的测试:
@Test
public void test01()
{
Position p = getPositionAt('a', 1);
assertNotNull("a1 exists", p);
assertNotNull("figure exists a1", p.getFigure());
p = getPositionAt('a', 2);
assertNotNull("exists a2", p);
assertNull("figure exists a2", p.getFigure());
p = getPositionAt('b', 1);
assertNotNull("exists b1", p);
assertNull("figure exists b1", p.getFigure());
}
我需要在运行测试是打印每个断言消息到标准输出,然后导致断言的。
这是需要从测试类格式:
a1 exists -success
figure exists a1 -success
exists a2 -success
figure exists a2 -succcess
exists b1 -succcess
figure exists b1 -failed
但如何做到这一点? 我使用JUnit一个相当新的工作,而且不知道。 有没有使用方法runners
和suites
? 或存在任何assertSuccess()
assertFailed()
方法? 感谢您的任何提示。
首先,你有两个问题,一个也没有。 当断言失败,一个AssertionError
抛出异常。 这可以防止任何断言过去,这点从被检查。 为了解决这个问题,你需要使用一个ErrorCollector 。
其次,我不相信有内置于JUnit来做到这一点的任何方式。 但是,你可以实现你自己的方法来封装的断言:
public static void assertNotNull(String description, Object object){
try{
Assert.assertNotNull(description, object);
System.out.println(description + " - passed");
}catch(AssertionError e){
System.out.println(description + " - failed");
throw e;
}
}
所有assertXXX方法有一个表单,允许用于显示误差的字符串:
assertNotNull("exists a2", p); // prints "exists a2" if p is null
有印刷在成功的消息没有特别的价值。
编辑
Junit的通常提供2所形成断言的。 按照上面的例子,你可以测试中的2种方式1空值:
assertNotNull(p)
要么
assertNotNull("my message on failure", p)
该框架将与您(它的框架提供)不再需要其他的努力打印错误消息。
为了测试例外您可以使用以下方式:
try{
someCall();
catch(Exception e){
fail(): // exception shouldn't happen, use assertTrue(true) if it should
}
同样,也有用于添加的消息的这些方法的版本
检查API
一个不得已的选择是对的每个断言有相应System.out.println
,但显然这是不太理想。 不过,如果这些方法都失败了,它会解决这个问题。