如何使JUnit打印断言和结果

我有一些像这样的测试:

@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()); } 

运行测试时我需要的是将每个断言消息打印到stdout然后打断断言的结果。

这是测试类需要的格式:

 a1 exists -success figure exists a1 -success exists a2 -success figure exists a2 -succcess exists b1 -succcess figure exists b1 -failed 

但是怎么做呢? 我是JUnit的新工作,不知道。 有没有办法使用runnerssuites ? 或者存在任何assertSuccess()assertSuccess() assertFailed()方法? 谢谢你的任何提示。

首先,你有两个问题,而不是一个。 当断言失败时,抛出AssertionErrorexception。 这可以防止检查超过此点的任何断言。 要解决此问题,您需要使用ErrorCollector 。

其次,我不相信JUnit有任何方法可以做到这一点。 但是,您可以实现自己的方法来包装断言:

 public static void assertNotNull(String description, Object object){ try{ assertNotNull(description, object); System.out.println(description + " - passed"); }catch(AssertionError e){ System.out.println(description + " - failed"); throw e; } } 

所有assertXXX方法都有一个允许在出错时显示String的表单:

assertNotNull("exists a2", p); // prints "exists a2" if p is null

在成功时打印消息没有特别的价值。

编辑

Junit通常提供2种forms的断言。 要按照上面的示例,您可以使用以下两种方法之一测试空值:

assertNotNull(p)

要么

assertNotNull("my message on failure", p)

框架将打印错误消息,而无需您进行其他任何操作(由框架提供)。

要测试exception,您将使用以下模式:

 try{ someCall(); catch(Exception e){ fail(): // exception shouldn't happen, use assertTrue(true) if it should } 

同样,这些方法的版本用于添加消息

检查API

最后一种选择是将每个断言与相应的System.out.println配对,但显然不太理想。 如果所有其他方法都失败,它仍将解决问题。