如何定义在 Intellij 中运行 junit 测试的顺序?
我有一个片状的 junit 测试,只有当我运行所有测试时才会失败。我认为一个测试导致另一个测试失败,我想在尝试修复它之前证明它。
如果我运行所有测试,它运行“错误设置”,然后运行“错误设置后失败的测试”。它还在两者之间运行许多不相关,缓慢的测试。但是,如果我使用一种模式来只运行这两个,它就会运行“在错误设置后失败的测试”,然后是“错误设置”。结果,两者都通过了。
如何按此顺序仅运行“错误设置”和“错误设置后失败的测试”?
我有一个片状的 junit 测试,只有当我运行所有测试时才会失败。我认为一个测试导致另一个测试失败,我想在尝试修复它之前证明它。
如果我运行所有测试,它运行“错误设置”,然后运行“错误设置后失败的测试”。它还在两者之间运行许多不相关,缓慢的测试。但是,如果我使用一种模式来只运行这两个,它就会运行“在错误设置后失败的测试”,然后是“错误设置”。结果,两者都通过了。
如何按此顺序仅运行“错误设置”和“错误设置后失败的测试”?
根据JUnit的维基:
根据设计,JUnit 不指定测试方法调用的执行顺序。到目前为止,这些方法只是按照反射 API 返回的顺序调用的。但是,使用 JVM 顺序是不明智的,因为 Java 平台没有指定任何特定顺序,实际上 JDK 7 返回或多或少的随机顺序。当然,编写良好的测试代码不会假设任何顺序,但有些会,并且可预测的故障比某些平台上的随机故障更好。
从版本 4.11 开始,JUnit 将默认使用确定性但不可预测的顺序 (MethodSorters.DEFAULT)。要更改测试执行顺序,只需使用@FixMethodOrder对测试类进行批注,然后指定一个可用的 MethodSorters:
@FixMethodOrder(MethodSorters.JVM)
:将测试方法保留为 JVM 返回的顺序。此顺序可能因运行而异。
@FixMethodOrder(MethodSorters.NAME_ASCENDING)
:按方法名称按词典顺序对测试方法进行排序。
您可以使用和更改方法名称以匹配您的特定订单。我知道你只是为了调试而使用它,但它依赖于你的测试方法执行顺序是一种测试气味,JUnit没有提供对测试方法执行顺序的更细粒度的控制。MethodSorters.NAME_ASCENDING
正如Ali Dehghani所说,您可以通过以下方式订购测试方法的执行
@FixMethodOrder(MethodSorters.NAME_ASCENDING):按方法名称按词典顺序对测试方法进行排序。
法典:
@FixMethodOrder(MethodSorters.NAME_ASCENDING)
public class ApplicationTest extends ActivityInstrumentationTestCase2<MainActivity> {
public ApplicationTest() {
super(MainActivity.class);
}
@Rule
public ActivityTestRule<MainActivity> mActivityTestRule = new ActivityTestRule<>(MainActivity.class);
@Test
void t1AttachUI(){
// testing code goes here
}
@Test
void t2InitializeViews(){
// testing code goes here
};
@Test
void t3SettingValues(){
// testing code goes here
};
@Test
void t4Validation(){
// testing code goes here
};
@Test
void t3AfterButtonPress(){
// testing code goes here
};
}