java - 为什么 JUnit 5 Suite 注释 @SelectClasses 和 @IncludeClassNamePatterns 无法找到不以“Tests”或“Test”结尾的测试?
问题描述
在升级到 JUnit 5(版本 5.5.2)时,我对套件功能有了一个奇怪的发现:我的套件可以找到并运行以单词“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 能够运行这些 Base 测试,但测试套件仍然无法找到它们。
我的代码将类似于以下内容:
@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 中有正确的依赖项。有关最小的 pom.xml,请参见例如https://github.com/junit-team/junit5-samples/tree/master/junit5-jupiter-starter-maven。
JUnitPlatform
,SelectClasses
等人。允许您通过 JUnit 4 运行 JUnit 平台测试。如果您的构建工具或 IDE 本身不支持 JUnit 平台,您可能只想这样做。JUnit 5 目前没有对类似于 JUnit 4@Suite
注释的测试套件的任何明确支持。
我建议您完全摆脱Com_Base_Suite
并使用可以通过 Maven<includes>
部分配置的命名约定。
推荐阅读
- scrapy - 如何将 python 请求与 scrapy 一起使用?
- python - 控制 TensorFlow 中的依赖关系
- javascript - 如何在使用 json_encode() 从 laravel 控制器返回的刀片视图中显示表值?
- toggle - 旨在根据 CapsLock 状态切换的 AHK 脚本始终切换为“关闭”,我无法将其更改为“开启”
- java - 以编程方式连接到 Android 中的隐藏 Wi-Fi 网络?
- vue.js - 使用 v-model 在 Vue 中输入字段不起作用
- php - 在视图 CodeIgniter 中加载视图
- bash - Linux telnet shell 脚本
- sql-server - 从库存表中,找出库存为零的两个日期之间的日期
- javascript - 异步错误处理包装器不起作用