我有一个片状的junit测试,只有在我运行所有测试时才会失败.我认为一个测试导致另一个测试失败,我想在我尝试修复它之前证明它.
如果我运行所有测试,它会运行"错误设置",然后运行"错误设置后失败的测试".它还会在两者之间运行许多无关紧要的慢速测试.但是,如果我使用一个模式只运行这两个,它运行"测试失败后设置失败"然后"错误设置".结果,两个都通过了.
如何按顺序运行"错误设置"和"在错误设置后测试失败"?
根据JUnit的维基:
根据设计,JUnit不指定测试方法调用的执行顺序.到目前为止,这些方法只是按反射API返回的顺序调用.但是,使用JVM顺序是不明智的,因为Java平台没有指定任何特定顺序,实际上JDK 7会返回或多或少的随机顺序.当然,编写良好的测试代码不会假设任何顺序,但有些会这样做,并且可预测的故障优于某些平台上的随机故障.
从版本4.11开始,JUnit将默认使用确定性但不可预测的顺序(MethodSorters.DEFAULT).要更改测试执行顺序,只需使用@FixMethodOrder注释您的测试类,并指定一个可用的MethodSorters:
@FixMethodOrder(MethodSorters.JVM)
:按JVM返回的顺序保留测试方法.此订单可能因运行而异.
@FixMethodOrder(MethodSorters.NAME_ASCENDING)
:按字典顺序按方法名称对测试方法进行排序.
您可以使用MethodSorters.NAME_ASCENDING
和更改方法名称以匹配您的特定订单.我知道你只是为了调试而使用它,但它依赖于你的测试方法执行顺序是一个测试气味而JUnit没有提供对测试方法执行顺序更精细的颗粒控制
如Ali Dehghani所说,您可以通过以下命令命令执行测试方法
@FixMethodOrder(MethodSorters.NAME_ASCENDING):按字典名称按方法名称对测试方法进行排序。
码:
@FixMethodOrder(MethodSorters.NAME_ASCENDING) public class ApplicationTest extends ActivityInstrumentationTestCase2{ public ApplicationTest() { super(MainActivity.class); } @Rule public ActivityTestRule 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 }; }