我有一个Junit测试类,其中包含多个@Test方法,我需要按顺序运行。如果方法中抛出异常,我想停止整个测试用例并输出错误,但所有其他测试方法都在运行。
public class{
@Test{
//Test1 method`enter code here`
}
@Test{
//Test2 method
}
@Test{
//Test3 method
}
}
如果Test1方法失败,则不要运行其他测试
注意:所有都是独立测试
答案 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,我能够实现您的期望,我正在使用社区版。
在可使用测试方法的课程中转到“编辑配置”。(运行->“编辑配置”)
选择“测试类型”作为“ 类别” 如下图所示。
运行类测试时,它将执行类内所有@Test
带注释的方法,如下图所示。
答案 3 :(得分:2)
如果您需要保留后果并且未通过测试而不使整套测试失败,请将所有此类测试合并为一个并通过假设进行测试。
答案 4 :(得分:1)
以下是TESTNG如何指定测试运行顺序的示例:
@Test(priority = 1)
public void test1(){}
@Test(priority = 2)
public void test2(){}
@Test(priority = 3)
public void test3(){}