具有多个@Test方法的Junit测试类

时间:2012-12-13 13:40:10

标签: java junit junit4

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

public class{

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

@Test{
 //Test2 method
}

@Test{
 //Test3 method
}

}

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

注意:所有都是独立测试

5 个答案:

答案 0 :(得分:10)

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

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

答案 1 :(得分:8)

如同here所述,JUnit 4.11支持带注释@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;
  }
}

答案 2 :(得分:3)

使用intellij idea IDE,我能够实现您的期望,我正在使用社区版。

在可使用测试方法的课程中转到“编辑配置”。(运行->“编辑配置”)

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

enter image description here

运行类测试时,它将执行类内所有@Test带注释的方法,如下图所示。

enter image description here

答案 3 :(得分:2)

如果您需要保留后果并且未通过测试而不使整套测试失败,请将所有此类测试合并为一个并通过假设进行测试。

答案 4 :(得分:1)

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

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

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

@Test(priority = 3)
public void test3(){}