如何使 JUnit 打印断言结果

2022-09-01 06:56:19

如何获取要打印的 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());
}

这是我希望获得的打印输出格式:

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

有没有办法使用 和 来做到这一点?或者是否存在任何方法?runnerssuitesassertSuccess()assertFailed()


答案 1

首先,您有两个问题,而不是一个问题。当断言失败时,将引发异常。这可以防止检查超过此点的任何断言。要解决此问题,您需要使用错误收集器AssertionError

其次,我不相信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;
     }
}

答案 2

所有 assertXXX 方法都有一个允许在出错时显示字符串的窗体:

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

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

编辑

Junit 通常提供 2 种形式的断言。要遵循上面的示例,您可以通过以下 2 种方式之一测试空值:

assertNotNull(p)

assertNotNull("my message on failure", p)

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

若要测试异常,可以使用以下模式:

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

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

检查接口