繁体   English   中英

如何在Intellij中定义运行junit测试的顺序?

[英]How do I define an order to run junit tests in Intellij?

我有一个片状的junit测试,只有在我运行所有测试时才会失败。 我认为一个测试导致另一个测试失败,我想在我尝试修复它之前证明它。

如果我运行所有测试,它会运行“错误设置”,然后运行“错误设置后失败的测试”。 它还会在两者之间运行许多无关紧要的慢速测试。 但是,如果我使用一个模式只运行这两个,它运行“测试失败后设置失败”然后“错误设置”。 结果,两个都通过了。

如何按顺序运行“错误设置”和“在错误设置后测试失败”?

根据JUnit的维基

根据设计,JUnit不指定测试方法调用的执行顺序。 到目前为止,这些方法只是按反射API返回的顺序调用。 但是,使用JVM顺序是不明智的,因为Java平台没有指定任何特定顺序,实际上JDK 7会返回或多或少的随机顺序。 当然,编写良好的测试代码不会假设任何顺序,但有些会这样做,并且可预测的故障优于某些平台上的随机故障。

从版本4.11开始,JUnit将默认使用确定性但不可预测的顺序(MethodSorters.DEFAULT)。 要更改测试执行顺序,只需使用@FixMethodOrder注释您的测试类,并指定一个可用的MethodSorters:

@FixMethodOrder(MethodSorters.JVM) :按JVM返回的顺序@FixMethodOrder(MethodSorters.JVM)测试方法。 此订单可能因运行而异。

@FixMethodOrder(MethodSorters.NAME_ASCENDING) :按字典顺序按方法名称对测试方法进行排序。

您可以使用MethodSorters.NAME_ASCENDING并更改方法名称以匹配您的特定订单。 我知道你只是为了调试而使用它,但它依赖于你的测试方法执行顺序是一个测试气味而JUnit没有提供对测试方法执行顺序更精细的颗粒控制

正如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
    };
}

单元测试应该是独立的,因此大多数框架不保证或强制执行它们的顺序。 但是,由于你想要以最简单的方式强制执行命令,所以我创建了一个“扔掉”测试套件或测试方法,以我希望它们运行的​​任何顺序调用测试。单元测试是方法,只需打电话给他们。 如果您正在处理数十项测试,这很容易做到,如果您要处理数百或数千次测试,那么这些测试根本不具吸引力。

尝试尽可能地隔离片状交互,然后在一次性调用方法中交换不良交互测试的顺序。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM