我发现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错误的输出与每个测试的输出放在一起。
1条答案
按热度按时间deyfvvtc1#
在该示例中,您将混合使用JUnit 4与JUnit Jupiter(也称为JUnit 5).
导入
org.junit.Assert
是JUnit 4的一部分,而其他导入是JUnit Jupiter(也称为JUnit 5)的一部分。一般来说,单元测试不应该依赖于任何执行顺序,因为它们应该独立于顺序。
JUnit Jupiter(或者更准确地说是junit-jupiter-engine)改变了顺序;有关详细信息,请参阅文档。
如果真的有必要有一个特定的顺序,你可以使用
Order
注解。例如(从文档中复制):我强烈建议不要在单元测试中使用order注解,有时候在集成测试中使用order注解会很有用。
最后,maven surefire插件或Maven不会改变测试的执行顺序,这是由junit-jupiter引擎故意完成的。