gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 09:16:02 25 4
gpt4 key购买 nike

在升级到 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com