Brief

Junit 4.11里增加了指定测试方法执行顺序的特性

测试类的执行顺序可通过对测试类添加注解 “@FixMethodOrder(value)” 来指定,其中value 为执行顺序

三种执行顺序可供选择:默认(MethodSorters.DEFAULT),按方法名(MethodSorters.NAME_ASCENDING)和JVM(MethodSorters.JVM)

当没有指定任何顺序时,按默认来执行

Sorters

1. MethodSorters.DEFAULT

默认顺序由方法名hashcode值来决定,如果hash值大小一致,则按名字的字典顺序确定

由于hashcode的生成和操作系统相关(以native修饰),所以对于不同操作系统,可能会出现不一样的执行顺序,在某一操作系统上,多次执行的顺序不变

实现代码:

 DEFAULT Sorter

2. MethodSorters.NAME_ASCENDING (推荐)
按方法名称的进行排序,由于是按字符的字典顺序,所以以这种方式指定执行顺序会始终保持一致;

不过这种方式需要对测试方法有一定的命名规则,如 测试方法均以testNNN开头(NNN表示测试方法序列号 001-999)

 NAME Sorter

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

Samples

以下是对Win7 - JDK7 - Junit4.11 的执行结果

 View Code

1. DEFAULT

结果始终为:

test002Second
test001First
test003Third

2. NAME_ASCENDING

结果始终为:

test001First
test002Second
test003Third

3. JVM

多数情况下 结果为:

test002Second
test001First
test003Third

偶尔出现:

test001First
test003Third
test002Second

Dig more ..

实际上 Junit里是通过反射机制得到某个Junit里的所有测试方法,并生成一个方法的数组,然后依次执行数组里的这些测试方法;

而当用annotation指定了执行顺序,Junit在得到测试方法的数组后,会根据指定的顺序对数组里的方法进行排序;

 View Code

三种执行顺序的定义如下:

 View Code

由上可以看出 当设置为MethodSorters.JVM时,其并没有提供一个Comparator的实现,所以执行方法的顺序实际上就是 clazz.getDeclaredMethods();得到的数组里方法的顺序,而由于java里对getDeclaredMethods返回的方法没有指定任何顺序,所以最终导致Junit测试方法的执行顺序也不是确定的

Junit 测试方法排序相关推荐

  1. junit测试方法_JUnit测试方法订购

    junit测试方法 直到版本4.10为止的Junit都使用反射API返回的测试类中测试方法的顺序作为测试方法执行的顺序– Class.getMethods() . 引用getMethods()api的 ...

  2. JUnit测试方法订购

    直到4.10版为止的Junit都使用反射API返回的测试类中测试方法的顺序作为测试方法执行的顺序– Class.getMethods() . 引用getMethods()api的Javadoc: 返回 ...

  3. Junit测试方法编写

    写一个测试MathUtil的add方法的测试方法 注意:给一个方法加上@Test注解,那么该方法就是一个测试方法(类似于一个main方法) 1)Junit测试方法的规则: 1)测试方法一定在方法顶部要 ...

  4. 如何在JUnit4中按特定顺序运行测试方法?

    本文翻译自:How to run test methods in specific order in JUnit4? I want to execute test methods which are ...

  5. 深入JUnit源码之Runner

    初次用文字的方式记录读源码的过程,不知道怎么写,感觉有点贴代码的嫌疑.不过中间还是加入了一些自己的理解和心得,希望以后能够慢慢的改进,感兴趣的童鞋凑合着看吧,感觉JUnit这个框架还是值得看的,里面有 ...

  6. junit源码解析--初始化阶段

    OK,我们接着上篇整理.上篇博客中已经列出的junit的几个核心的类,这里我们开始整理junit完整的生命周期. JUnit 的完整生命周期分为 3 个阶段:初始化阶段.运行阶段和结果捕捉阶段. 这篇 ...

  7. Junit 测试之 Spring Test

    在做spring相关测试时比较麻烦,如果只用JUnit测试,需要没测有初始化一下applicationContext,效率比较底下,而且也有不足之处. 导致多次Spring容器初始化问题 根据JUni ...

  8. tdd java_适用于Idea的面向现代TDD的Java 8 JUnit测试模板(带有Mockito和AssertJ)

    tdd java 使用类似于BDD的语法,Java 8和Mockito-AssertJ二重奏为Idea调整JUnit测试类模板. 本文涵盖的主题似乎很简单. 但是,根据我的培训师经验,我知道(不幸的) ...

  9. 适用于Idea的面向现代TDD的Java 8 JUnit测试模板(带有Mockito和AssertJ)

    使用类似BDD的语法,Java 8和Mockito-AssertJ二重奏为Idea调整JUnit测试类模板. 本文涵盖的主题似乎很简单. 但是,根据我的培训师经验,我知道(不幸的是)这不是常见的做法. ...

最新文章

  1. 当Docker遇到Intellij IDEA,再次解放了生产力~
  2. Sun Solaris 9 下Squid 代理服务器的配置笔记
  3. 计算机硬件技术 教案,教案07-计算机硬件技术基础.doc
  4. python注释可以辅助程序调试吗_Python 注释
  5. 基于FPGA的UART接口协议设计
  6. PHP面试题:使用PHP描述快速排序算法,对象可以是一个数组?
  7. python 的内存回收,及深浅Copy详解
  8. GitHub项目功能理解
  9. mysql--SQL编程(关于mysql中的日期) 学习笔记2
  10. msgget();msgsnd();msgrcv();msgctl(); 消息队列 Linux进程间的通信方式之消息队列
  11. 传感器实训心得体会_传感器心得体会范文
  12. 经纬度坐标和投影坐标的转换
  13. java severs_openssl简介-指令s_server
  14. 伍斯特学院计算机专业排名,美国大学计算机专业排名!
  15. nmon监控工具使用(打开nmon文件出现  运行时错误13类型不匹配)
  16. 彻底清除计算机磁盘上的病毒,电脑硬盘病毒无法彻底删除怎么办
  17. 源码解析少儿编程微课程9:机械手臂模拟制作
  18. Java版90经典坦克大战下载_经典90坦克大战
  19. python设计一个三维向量类_一个简单的三维向量类
  20. 数学模型参考文献的格式

热门文章

  1. RSR系列路由器密码恢复
  2. 【软件工程】 软件需求分析
  3. smtp java 抓包_[Wireshark]_003_电子邮件抓包分析
  4. VL813-Q7威锋一出四HUB芯片方案
  5. python小数点处理_如何在python中打小数点
  6. ipv4v6双栈技术_IPv6过渡技术之双栈技术
  7. Latex: Cannot find ‘xxx.bcf‘!
  8. GeneXus3 筛选条件
  9. ELK入门(十八)——Kibana APM server安装部署
  10. Unity Hair 毛发系统 初体验