有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java Maven surefire插件在许多测试中不运行单个测试

我有一个maven项目(multimodule,JDK11),其中有很多模块和测试

我突然注意到,我的一个测试没有作为surefire插件的一部分调用。 同一模块中的其他测试确实可以成功调用。 我能够通过Intellij成功运行此测试。测试未被禁用或忽略。它包含一组@Test方法。此外,我可以使用mvn test -Dtest=...参数专门运行它

测试类将被成功编译并显示在目标/测试类中。 (我已经用-X运行了,在那里找不到相关的附加数据)

我正在使用surefire插件2.22.1;junit vintage引擎:5.2.0;junitplatformrunner:1.2.0;弹簧靴2.5.3(带BOM);我的测试是基于spring的,并使用@ExtendWith(SpringExtension.class)调用 (我确实有其他基于spring的测试,它们按预期调用)

在此之后,我还尝试使用2.22.2。这并没有解决问题

在这个question之后,我已经验证了,事实上,测试类中所有未调用的测试都以“test”字作为前缀

编辑: 这个问题发生在属于某个模块的测试中,该模块是我公司一个较大项目的一部分,该项目在POM继承链中继承了各种默认值。不幸的是,我不能将我的POM从中分离出来并呈现出来。 我试图在一个新的独立项目中重现这个问题,但没有成功(也就是说,所有测试都按预期调用)

我错过了什么?surefire插件是否有一个隐藏的开关,可以显示引擎盖下发生了什么,surefire将要执行的测试列表拉到哪里


共 (2) 个答案

  1. # 1 楼答案

    surefire插件(默认情况下)将仅运行具有以下名称语法的测试

    "**/Test*.java" - includes all of its subdirectories and all Java filenames that start with "Test".
    "**/*Test.java" - includes all of its subdirectories and all Java filenames that end with "Test".
    "**/*Tests.java" - includes all of its subdirectories and all Java filenames that end with "Tests".
    "**/*TestCase.java" - includes all of its subdirectories and all Java filenames that end with "TestCase".
    

    更多详细信息请参见here

  2. # 2 楼答案

    问题解决了! 以下是@Kathrin Geilmann的评论:

    ...By default surefire only executes: ...Test.java, Test....java, ...Tests.java and ...TestCase.java

    我的文件名以。。。测试员(!@#$$%^)

    谢谢