您的当前位置:首页正文

Junit测试方法执行顺序

来源:华佗小知识

一、问题

做测试时,写了两个test case,期望先执行bindByBadData再执行bindByCorrectData。以为Junit是按方法位置的先后顺序来执行的,执行时发现并不是,与预期的执行顺序相反,如图:


image.png

二、解决办法

Junit 4.11里增加了指定测试方法执行顺序的特性,测试类的执行顺序可通过对测试类添加注解 @FixMethodOrder(value) 来指定,其中value 为执行顺序。三种执行顺序可供选择:
1、默认(MethodSorters.DEFAULT);
2、按方法名(MethodSorters.NAME_ASCENDING);
3、JVM(MethodSorters.JVM);
当没有指定任何顺序时,按默认来执行,代码调整后,如图:


image.png

三、拓展

  1. MethodSorters.DEFAULT
    默认顺序由方法名hashcode值来决定,如果hash值大小一致,则按名字的字典顺序确定由于hashcode的生成和操作系统相关(以native修饰),所以对于不同操作系统,可能会出现不一样的执行顺序,在某一操作系统上,多次执行的顺序不变。

  2. MethodSorters.NAME_ASCENDING (推荐)
    按方法名称的进行排序,由于是按字符的字典顺序,所以以这种方式指定执行顺序会始终保持一致;不过这种方式需要对测试方法有一定的命名规则,如 测试方法均以test_NN_fun命名(NN表示测试方法序列号 01-99)如:test_01_bindByBadData、test_02_bindByCorrectData

  3. MethodSorters.JVM
    按JVM返回的方法名的顺序执行,此种方式下测试方法的执行顺序是不可预测的,即每次运行的顺序可能都不一样(JDK7里尤其如此).

本文如未解决您的问题请添加抖音号:51dongshi(抖音搜索懂视),直接咨询即可。

热门图文