【问题标题】:Drawbacks of TestNG compared to jUnit? [closed]与 jUnit 相比,TestNG 的缺点? [关闭]
【发布时间】:2010-11-23 20:45:40
【问题描述】:

我熟悉 jUnit,听说 TestNG 可能是解决 jUnit 一些烦恼的方法 - 例如。它坚持为每个测试创建一个单独的测试类实例,从而迫使我对想要在测试之间重用的对象使用静态字段。

(假设你同意我的观点,这是一个缺点,不要把这个问题变成不是的)

我在这里要问的是,与 jUnit 相比,TestNG 有什么缺点?假设这是一个新项目并且没有任何迁移成本,为什么不使用 TestNG?

【问题讨论】:

  • 您知道在测试之间重用对象会增加测试之间的耦合吗?耦合测试是良好单元测试的彻底祸根,因为它们允许一个测试的问题导致另一个测试失败(或异常)......
  • @Donal - 我们不要问这个问题。在编写包含大量组件的繁重集成测试时,不重用是另一个祸根,因为它会使测试运行花费数小时。
  • 同意;这是一个附带问题。
  • 在测试之间重用对象并不一定会增加测试之间的耦合,特别是如果这些对象是不可变的。这样做的好处是不必一遍又一遍地创建昂贵的对象。 TestNG 为您提供两种方法的选择,而 JUnit 则强制您选择其中一种。

标签: junit testng


【解决方案1】:

我是 TestNG 的创建者。由于我显然有偏见,因此我不会参与其中,但我很乐意回答您可能对 TestNG 提出的任何问题。

安迪:感谢您的评论。仅供参考(您可能已经知道,但可能原始海报不知道),there is a TestNG Eclipse plug-in(我与 TestNG 并行开发)。

【讨论】:

  • 你好 :) 很高兴“认识”你,我很高兴你能在 SO 上认识人们。我已经使用 TestNG 大约 10 分钟了……你为什么选择不使用 @Ignore 属性?我喜欢@Ignore 的地方在于您可以在注释中指定忽略原因,而AFAIK 无法使用“enabled=false”
  • 在 TestNG 中,您使用“@Test(enabled = false)”将测试标记为忽略。这使初学者更容易发现(只需输入“@Test(”,然后输入 control-space 即可获得所有可用属性的列表)。
【解决方案2】:

与 JUnit 相比,我个人没有遇到任何明显的缺点。

在一个新项目开始时,我的团队切换到了 TestNG 并且没有后悔。 TestNG 比单元测试更强大,支持更广泛的使用。

一些工具支持 JUnit 但不支持 TestNG。这些是我还不需要的工具。例如:

  • Google 的 CodePro Analytix 支持generation of JUnit unit tests
  • 用于 RCP 开发的 Eclipse IDE 支持“JUnit 插件测试”的运行/调试配置。

【讨论】:

    【解决方案3】:

    作为 TestNG 的大力支持者,我仍然认为它被工具作者视为第二名。许多工具和库从一开始就支持 JUnit,但您必须等到它们也实现对 TestNG 的支持。如果您打算使用一些最新的嗡嗡声技术,这可能是一个严重的缺点。

    多年来情况改善了很多。例如,这曾经是 Spring、Gradle 或 Maven Surefire 的问题,但现在不再是问题,因为它们现在都支持 TestNG。此外,所有 IDE 都平等地对待这两个框架。

    因此,请确保您计划使用的其他技术与 TestNG 配合得很好。这很少会成为问题,但最好提前确保它。

    【讨论】:

      【解决方案4】:

      对我来说,最大的问题是与 spring 的集成。 我不喜欢扩展 TestNg 类并编写这样的代码:

      @Test
      @ContextConfiguration(locations = { "classpath:spring-test-config.xml" })
      public class TestSpring extends AbstractTestNGSpringContextTests {
      

      因为通常我有自己的测试类层次结构。 这就是我停止使用 TestNg 的主要原因。

      我必须同意参数化测试对我来说非常有吸引力。但是它们可以很容易地被 junit 数据提供者替换。

      https://github.com/TNG/junit-dataprovider/wiki/Getting-started

      【讨论】:

        猜你喜欢
        • 2010-09-05
        • 2012-03-09
        • 1970-01-01
        • 2018-02-13
        • 2011-10-24
        • 2018-06-22
        • 2016-11-11
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多