gpt4 book ai didi

java - 如果之前的步骤在 Junit 中失败,如何跳过剩余步骤

转载 作者:行者123 更新时间:2023-12-02 02:23:57 26 4
gpt4 key购买 nike

我有一些集成测试用例,它们作为具有特殊类别的 Junit 测试用例运行:

@Category(IntegrationTest.class)

因为是集成测试用例,所以每一步的成本都很高。通常我会重复使用之前步骤的一些结果来降低成本。为了使其正常工作,我将其添加到其中:

@FixMethodOrder(MethodSorters.NAME_ASCENDING)

一些示例如下:

@Category(IntegrationTest.class)
@FixMethodOrder(MethodSorters.NAME_ASCENDING)
public class TestAllocationPlanApi {

@Test
public void testStep01_verifyOrigProgram22275() {...}

@Test
public void testStep02_CopyProgram() {...}
}

除了失败过程之外,它们运行良好:

如果step01失败,我们不需要运行step02,但Junit仍然会转到step02。

这是一种浪费,并使测试用例变得更加复杂,因为您需要仔细处理传递到step02的那些变量。

我试过了

-Dsurefire.skipAfterFailureCount=1

another thread 中对此进行了讨论,但它不起作用,如果前面的步骤失败,测试用例仍然会进入下一步。

关于测试用例的另一个烦人的事情是 Junit 总是在每个步骤之前重置所有实例变量。这迫使我使用静态变量将先前的结果传递到下一步:

private static Integer contractAId;

而且我无法在多个线程中运行它们。

有人有处理这些事情的好主意吗?

谢谢!

新年快乐!

最佳答案

您已将这些编写为不同测试,但这些测试之间存在一些依赖性。因此,听起来您已将单个逻辑测试流程拆分为多个测试方法。

为了满足这些依赖关系,您采用了测试命名约定,并指示 JUnit 按照命名约定暗示的顺序运行这些测试。此外,您的测试用例中有一些共享状态,这些状态正在逐步“传递”。

这种方法听起来很脆弱,并且可能会使以下操作变得非常困难:

  • 诊断故障、问题
  • 维持现有步骤
  • 添加新步骤

如果先前的测试失败,则指示 JUnit 以某种方式停止在测试用例中执行后续测试以及使用静态变量将先前的结果传递到下一步都是决定将单个逻辑测试拆分的症状多个 @Test 方法。

JUnit 没有测试用例中后续或先前测试的正式概念。这是有意为之,因为 @Test 方法应该彼此独立。

因此,与其尝试实现他的行为:如果先前的测试失败,则停止在测试用例中执行后续测试我建议重新访问您的测试以减少其运行时间、减少昂贵的设置时间和删除这种将单个逻辑测试流程拆分为多个测试方法的方法。相反,每个测试都应该是独立的;其范围应涵盖(a) 设立,(b) 执行; (c) 断言; (d) 拆除。

从你的问题中我可以看出,这是一个集成测试,因此设置、依赖管理、执行等可能并不简单,因此这种将单个逻辑测试流程拆分为多个测试方法的方法可能是一种分解的努力将复杂的测试流程转化为更容易理解的单元。如果是这样,那么我建议将每个“步骤”分解为私有(private)方法,并在单个 @Test 方法中编排它们。例如:

@Test
public void test_verifyOrigProgram22275() {
// you'll probably want to return some sort of context object from each step
// i.e. something which allows you to (a) test whether a step has succeeded
// and abort if not and (b) pass state between steps

step01_verifyOrigProgram22275();

step02_verifyOrigProgram22275();

...
}

private void step01_verifyOrigProgram22275() {...}

private void step02_CopyProgram() {...}

关于java - 如果之前的步骤在 Junit 中失败,如何跳过剩余步骤,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48066736/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com