为什么TestNG依赖于JUnit?

8

testng 作为Maven传递性依赖项将 junit 引入项目。难道它不应该是 junit 的替代品吗?

来自 mvn dependency:tree 命令的结果:

[INFO] +- org.testng:testng:jar:6.9.6:test
[INFO] |  \- junit:junit:jar:4.10:test
[INFO] |     \- org.hamcrest:hamcrest-core:jar:1.1:test

真的吗?为什么呢? 这会导致不断的疼痛,因为IDE提供了导入两个@Test注释,它们在使用上几乎相同,导致项目中同时存在junit和testng测试。

排除junit传递依赖是否安全?可能会有什么问题出现?

3个回答

6

Edwin Buck的答案是正确的,但我想添加一些关于依赖本身的信息。JUnit被标记为一个可选依赖项(查看pom文件):

<dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.10</version>
    <optional>true</optional>
</dependency>

根据 Maven 文档,这意味着如果不需要该功能,则可以排除依赖项:

这是因为项目中有些依赖仅用于某些功能,如果不使用该功能,则不需要它们。

所以至少该依赖项被设计成能够被排除。

再深入介绍一下 TestNG 和 JUnit 的联系,对于你可能需要该依赖项的特性,TestNG 支持直接执行 Junit 测试。根据文档,实现方法如下:

<test name="Test1" junit="true">
    <classes>
        <!-- ... -->

6
免责声明:我是TestNG的贡献者。
我们在一些版本之前用Gradle替换了Maven,但我们没有找到定义可选依赖项的方法。现在这个问题应该已经解决了,详情请见:https://github.com/cbeust/testng/pull/844 这就解释了为什么在某些版本中,你会看到JUnit作为TestNG的直接依赖。但这不是预期的行为,如果你不需要运行一些JUnit测试,可以将其从类路径中排除掉,不会有任何问题。

4
因为 testng 提供了 JUnit 集成,因此可以在 testng 框架中运行 JUnit 测试。基本上它作为一种路径被添加进来,以将 JUnit 测试从“JUnit 方式”迁移到“testng 方式”。您可以在这里阅读更多相关信息。
我不知道是否移除这个集成后,testng 仍能正常运行;但是,您始终可以移除传递依赖项并查看结果。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接