11

我有一个 Junit 测试类,其中包含多个 @Test 方法,我需要按顺序运行。如果方法中抛出异常,我想停止整个测试用例并出错,但所有其余的测试方法都在运行。

public class{

@Test{
 //Test1 method`enter code here`
}

@Test{
 //Test2 method
}

@Test{
 //Test3 method
}

}

如果 Test1 方法失败,则不要运行其他测试

注:均为独立测试

4

5 回答 5

12

单元测试应设计为彼此独立运行。无法保证执行顺序。您应该重新设计您的测试类,以便顺序不重要。

如果没有进一步的信息,很难具体建议您。但是有一个@before方法可能会有所帮助,该方法在运行每个测试之前检查一些先决条件。如果您包含Assume.assumeTrue(...)方法调用,那么如果条件失败,您的测试可能会被跳过?

于 2012-12-13T16:29:44.363 回答
10

正如这里所描述的,JUnit 4.11 支持使用 Annotation 的顺序执行@FixMethodOrder,但其他的都是正确的,所有测试都应该相互独立。

在测试结束时,您可以设置一个全局成功标志。该标志将在每次测试开始时进行测试。如果在一个测试结束时未设置标志(因为它在完成之前失败)所有其他测试也将失败。例子:

@FixMethodOrder(MethodSorters.NAME_ASCENDING)
public class ConsecutiveFail{
  private boolean success = true;

  @Test
  public void test1{
    //fist two statements in all tests
    assertTrue("other test failed first", success);
    success = false;
    //do your test
    //...

    //last statement
    success = true;
  }

  @Test
  public void test2{
    //fist two statements in all tests
    assertTrue("other test failed first", success);
    success = false;
    //do your test
    //...

    //last statement
    success = true;
  }
}
于 2012-12-26T20:47:04.607 回答
3

我能够使用 intellij idea IDE 实现您正在寻找的东西,我正在使用社区版。

在测试方法可用的类中转到编辑配置。(运行->编辑配置)

选择测试类型为“”,如下图所示。

在此处输入图像描述

当您运行 Class Test 时,它将执行@Test类内的所有 Annotated 方法,如下图所示。

在此处输入图像描述

于 2018-09-04T09:55:45.023 回答
2

如果您需要保留结果并且未通过测试而不会使整套测试失败,请将所有此类测试放在一起并通过假设进行测试。

于 2012-12-13T20:53:46.893 回答
1

以下是 TESTNG 如何指定测试运行顺序的示例:

@Test(priority = 1)
public void test1(){}

@Test(priority = 2)
public void test2(){}

@Test(priority = 3)
public void test3(){}
于 2016-07-29T18:39:54.260 回答