有一个现有的软件项目,由几位开发人员开发和维护。 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/