如何使JUnit打印断言和结果

时间:2013-04-10 12:35:06

标签: java testing junit junit4

我有一些像这样的测试:

@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()assertFailed()方法?谢谢你的提示。

4 个答案:

答案 0 :(得分:19)

首先,你有两个问题而不是一个问题。当断言失败时,抛出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;
     }
}

答案 1 :(得分:10)

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

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

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

修改

Junit通常提供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
}

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

检查API

答案 2 :(得分:2)

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

答案 3 :(得分:0)

这里的现有答案/注释包含足够的信息,以了解如何基于JUnit断言打印某些内容-但它们也解释了这样做可能不是您实际想要执行的操作,并且可能缺少在其中运行单元测试的要点。第一名。

您应该查看测试结果本身,而不是在不了解如何/在何处查看测试结果时尝试打印某些内容。

现在,如何/在何处查看结果本身取决于测试的运行方式-您需要了解测试的运行方式,然后根据运行方式研究如何查看测试结果。以下是一些(但不限于)示例: