maven - 防止在项目中使用 junit4 库

标签 maven intellij-idea junit4 junit5

有一个现有的软件项目,由几位开发人员开发和维护。 IDE 是 IntelliJ,构建工具是 Maven .该项目同时进行了 JUnit 4 和 JUnit 5 测试。从现在开始,我们希望重构并仅使用 JUnit 5。

问题是 IDE 的代码补全仍然提供 JUnit 4 和 JUnit 5,开发人员可能会不小心使用它们,例如org.junit.Assert.assertTrue 而不是 org.junit.jupiter.api.Assertions.assertTrue

是否有一种优雅、自动化的方法来尽早检测 JUnit 4 类的使用情况?

最佳答案

一旦所有测试都从 JUnit 4 转换为 JUnit 5,就会有几个选项。

最直接的选择是从类路径中排除 JUnit 4。根据正在使用的库,可能需要添加一些依赖项级别的排除项以避免传递地引入 JUnit 4。如果正在使用任何 JUnit 4 导入,此设置将导致构建在编译阶段失败。它还通常会阻止 IDE 提供 JUnit 4 类作为自动完成选项。

如果另一个测试库需要 JUnit 4,则此选项可能不可用。例如,Testcontainers库仍然需要 JUnit 4 在类路径上,即使测试本身是用 JUnit 5 编写的 (testcontainers-java#970)。在这种情况下,一种选择是写一个 Checkstyle禁止非 Jupiter JUnit 导入的规则,并在发生 Checkstyle 失败时使构建失败。

相关的Checkstyle配置:

<module name="IllegalImport">
    <property name="regexp" value="true"/>
    <!-- Reject any org.junit import that's not also org.junit.jupiter: -->
    <property name="illegalClasses" value="^org\.junit\.(?!jupiter\.).+"/>
</module>

关于maven - 防止在项目中使用 junit4 库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61629824/

相关文章:

java - Eureka Client - 无法 Autowiring 客户端(spring 说定义了 2 个 bean)

java - 构建maven项目时不应该包含web.xml吗?网 bean

tomcat - 在 Eclipse 中,如何让正在运行的 tomcat 从依赖的 maven 项目中看到我的源代码更改?

java - 将tomcat添加到intellij中的模板

java - 查看 IDEA 13 Gradle 依赖

java - 在 webdriver 中维护浏览器 session

java - Maven 无法处理 Unicode 字符

java - 如何查找带有尾随注释的所有字段

java - JUnit4:如何验证变量名称是否正确

java - 使用 gradle 并行运行 JUnit4 测试