如何使JUnit的打印断言和结果(How make JUnit to print asserts a

2019-08-21 07:11发布

我有一些像这样的测试:

@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一个相当新的工作,而且不知道。 有没有使用方法runnerssuites ? 或存在任何assertSuccess() assertFailed()方法? 感谢您的任何提示。

Answer 1:

首先,你有两个问题,一个也没有。 当断言失败,一个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;
     }
}


Answer 2:

所有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



Answer 3:

一个不得已的选择是对的每个断言有相应System.out.println ,但显然这是不太理想。 不过,如果这些方法都失败了,它会解决这个问题。



文章来源: How make JUnit to print asserts and results