【问题标题】:How to pre-define the running sequences of junit test cases?如何预先定义junit测试用例的运行顺序?
【发布时间】:2016-04-26 02:07:31
【问题描述】:

我在 java 中有一个测试类,其中有几个由 @Test 注释的方法,不知何故,当我运行整个测试时,我想在方法 B 之前运行方法 A。有可能还是有必要?

【问题讨论】:

标签: java junit sequence


【解决方案1】:

这种对测试方法的依赖是糟糕的设计,应该避免。如果一个测试方法中有初始化代码需要在下一个测试方法中完成,则应将其分解到一个 setUp 方法中。

【讨论】:

  • 正确评论但不是问题的答案。
  • 不过,有一个很好的用例。让测试相互设置可能很糟糕,但有时我们可以说“如果 this 测试失败,那么运行 这些其他 测试没有意义,因为他们肯定也会失败”。在这种情况下,能够指定依赖项以便跳过它们会节省时间。
  • 是什么让您认为依赖排序测试是“糟糕的设计”?我会说将所有“设置”放在一个设置函数中是不好的设计,因为某些设置本身可能是您想要测试的东西,您最终会得到一个单一的函数,当它出现时将更难解释失败。有关测试依赖项的正确实现,请参阅 TestNG:testng.org/doc/documentation-main.html#dependent-methods
【解决方案2】:

我遇到的问题是报告。如果您想/需要查看每种测试方法是失败还是通过,那么您就完蛋了。

我了解您不希望一个测试建立在以前的测试之上,但无论如何,在某些情况下您可能需要它来执行此操作(或者您会将测试的复杂性增加一个数量级幅度)。

代码中的测试流程应该由测试的开发者还是框架的开发者来决定?

向 10 位 Java 开发人员展示 JUnit 测试代码,我敢打赌,大多数人会假设测试(无论外部如何)将按照它们在测试类中出现的顺序运行。

这不应该是 JUnit 的默认行为吗? (让我选择告诉它顺序,而不是让 JUnit 自己弄清楚”。)

更新:2014-11-18 较新版本的 JUnit 支持方法排序器

// 这会按字母顺序保存测试 @FixMethodOrder(MethodSorters.NAME_ASCENDING)

如果您“真的”想要执行自己的特定顺序,我认为您可以创建自己的方法分类器。

【讨论】:

  • junit 有自己的想法是愚蠢的。告诉我最好的做法是什么,不要强迫 SHIT 进入我的喉咙。
【解决方案3】:

测试应该有独立的顺序,但有时我们没有我们想要的。 如果您有一个包含数千个测试的大型遗留项目,并且它们取决于它们的执行顺序,那么您将遇到很多问题,例如,当您尝试在 java 7 上迁移时,因为它会打乱所有测试。

您可以在此处阅读有关此问题的更多信息:

junit test ordering and java 7

【讨论】:

    【解决方案4】:

    如果只有两种方法,那么您需要将其包装在一个真正不依赖于顺序的单元测试中。

    @Test
    public void testInOrder() throws Exception {
        testA(); 
        testB(); 
    }
    

    【讨论】:

    • 我已经尝试过但不满意,我认为可能还有其他方法可以做到这一点。无论如何,谢谢。
    【解决方案5】:

    在测试前后使用以下设置

    @Before
    public void setUp() throws MWException {
    
    }
    
    @After
    public void tearDown() {
    
    }
    

    【讨论】:

      猜你喜欢
      • 2012-03-28
      • 1970-01-01
      • 2018-04-23
      • 1970-01-01
      • 2020-04-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-17
      相关资源
      最近更新 更多