java - 为什么 JUnit 5 Suite 注释 @SelectClasses 和 @IncludeClassNamePatterns 无法找到不以 "Tests"或 "Test"结尾的测试?

标签 java maven junit junit5

在升级到 JUnit 5(版本 5.5.2)时,我对套件功能有了一个奇怪的发现:我的套件可以找到并运行以“Test”一词结尾的测试,但无法找到不包含“Test”的测试。以“Test”结尾(在我的例子中,它们以“Base”结尾)。

在 JUnit 4 中,我们使用 @Suite.SuiteClasses()注释来找到这些测试,但是 JUnit 5 @SelectClasses注释似乎完全错过了这些测试类。甚至使用 @IncludeClassNamePatterns({"^Com.*Base.*?$"})无法检测到测试,我觉得很奇怪(我想运行的测试以“Com”开头)。之后,我尝试了@Tag()注释,这也不起作用。

我认为这是因为 Maven Surefire(版本 2.22.2)仅检测以 Test 开头或以 Test、Tests 或 TestCase 结尾的测试类。因此,我尝试包含我的基本测试用例:

<includes>
        <include>**/*Base.java</include>
        <include>**/Test*.java</include>
        <include>**/*Test.java</include>
        <include>**/*Tests.java</include>
        <include>**/*TestCase.java</include>
</includes>

当我构建这个项目时,Maven 能够运行这些基础测试,但测试套件仍然无法找到它们。

我的代码将类似于以下内容:

@RunWith(JUnitPlatform.class)
@SelectClasses({
    Com_TestOne_Base.class,
    Com_TestTwo_Base.class,
    Com_TestThree_Base.class,
    Com_TestFour_Base.class,
    Com_TestFive_Base.class,
    Com_TestSix_Base.class,
})
public class Com_Base_Suite {
}

运行该套件的结果是成功,但没有实际运行任何测试。所有这些测试都已更新到 JUnit 5 并自行成功运行。

最佳答案

您遇到的问题是由于混合了 JUnit 4 和 5 造成的。Maven Surefire 能够开箱即用地运行 JUnit 5(又名 JUnit 平台)测试 - 前提是您的 pom.xml 中具有正确的依赖项。参见例如https://github.com/junit-team/junit5-samples/tree/master/junit5-jupiter-starter-maven最小的 pom.xml。

JUnitPlatform , SelectClasses等人。允许您通过 JUnit 4 运行 JUnit 平台测试。如果您的构建工具或 IDE 本身不支持 JUnit 平台,您可能只想这样做。 JUnit 5 目前没有对类似于 JUnit 4 的 @Suite 的测试套件提供任何显式支持。注释。

我建议你摆脱Com_Base_Suite全部放在一起,并遵循可以通过 Maven 的 <includes> 配置的命名约定。部分。

关于java - 为什么 JUnit 5 Suite 注释 @SelectClasses 和 @IncludeClassNamePatterns 无法找到不以 "Tests"或 "Test"结尾的测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58981160/

相关文章:

java - 如何使用额外的 mockito 参数测试参数化单元测试用例?

gradle - 我可以将 OSGi Mocks 与声明式服务注释一起使用吗

groovy - 使用参数化 Junit 测试中的命令行参数或系统属性?

java - 禁用 GoogleAnalytics 以测试和开发新版本

java - 与 arquillian 的 EAR 集成测试

maven - 使用一些 Maven 插件重命名 jar 中的文件

Android Gradle 构建失败 : Could not find com. google.android:support-v4:r18

java - 单击按钮时将组件添加到窗口

java - 线程不释放内存

java - 为团队设置 Maven Nexus Server 以共享内部构建的 jar