35

如何将我的 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

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

4

4 回答 4

22

首先,你有两个问题,不是一个。当断言失败时,将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;
     }
}
于 2013-04-10T12:42:47.540 回答
14

所有的 assertXXX 方法都有一个允许在错误时显示字符串的形式:

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

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

编辑

Junit 通常提供两种形式的断言。按照上面的示例,您可以通过以下两种方式中的一种来测试空值:

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

于 2013-04-10T12:40:47.077 回答
3

一个最后的选择是将每个 assert 与相应的 配对System.out.println,尽管显然这不太理想。尽管如此,如果一切都失败了,它将解决问题。

于 2013-04-10T12:39:51.473 回答
0

此处的现有答案/评论包含足够的信息来了解如何基于 JUnit 断言打印某些内容 - 但它们也解释了这样做可能不是您真正想要做的,并且可能首先错过了运行单元测试的要点.

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

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

于 2020-06-29T00:31:03.337 回答