根据测试输出打印Maven测试结果

n6lpvg4x  于 2022-11-22  发布在  Maven
关注(0)|答案(1)|浏览(174)

我发现Maven对我的测试方法的输出进行重新排序是没有帮助的。有什么方法可以阻止它这样做吗?例如:

import org.junit.jupiter.api.Test;
import static org.junit.Assert.fail;

class DemoTest {
    @Test
    void failDemo() {
        System.err.println("This test fails");
        fail();
    }

    @Test
    void passDemo() {
        System.err.println("This test passes");
    }
}

预期值:

mvn test
...
[INFO] Running DemoTest
This test fails
java.lang.AssertionError
        at DemoTest.failDemo(DemoTest.java:9)
[ERROR] failDemo  Time elapsed: 0.029 s  <<< FAILURE!
This test passes
[ERROR] Tests run: 2, Failures: 1, Errors: 0, Skipped: 0, Time elapsed: 0.037 s <<< FAILURE! - in DemoTest

实际值:

mvn test
...
[INFO] Running DemoTest
This test fails
This test passes
[ERROR] Tests run: 2, Failures: 1, Errors: 0, Skipped: 0, Time elapsed: 0.037 s <<< FAILURE! - in DemoTest
[ERROR] failDemo  Time elapsed: 0.029 s  <<< FAILURE!
java.lang.AssertionError
        at DemoTest.failDemo(DemoTest.java:9)

正如您在上面看到的,Maven删除了所有Assert错误的输出,收集它们,然后在最后输出它们,在总数之后。我希望Maven不这样做,而是将Assert错误的输出与每个测试的输出放在一起。

deyfvvtc

deyfvvtc1#

在该示例中,您将混合使用JUnit 4与JUnit Jupiter(也称为JUnit 5).
导入org.junit.Assert是JUnit 4的一部分,而其他导入是JUnit Jupiter(也称为JUnit 5)的一部分。
一般来说,单元测试不应该依赖于任何执行顺序,因为它们应该独立于顺序。
JUnit Jupiter(或者更准确地说是junit-jupiter-engine)改变了顺序;有关详细信息,请参阅文档。
如果真的有必要有一个特定的顺序,你可以使用Order注解。例如(从文档中复制):

@TestMethodOrder(OrderAnnotation.class)
class OrderedTestsDemo {

    @Test
    @Order(1)
    void nullValues() {
        // perform assertions against null values
    }

    @Test
    @Order(2)
    void emptyValues() {
        // perform assertions against empty values
    }

    @Test
    @Order(3)
    void validValues() {
        // perform assertions against valid values
    }

}

我强烈建议不要在单元测试中使用order注解,有时候在集成测试中使用order注解会很有用。
最后,maven surefire插件或Maven不会改变测试的执行顺序,这是由junit-jupiter引擎故意完成的。

相关问题