文档章节

深入探索:单元测试之测试执行顺序

灯-塔
 灯-塔
发布于 2017/09/10 21:57
字数 699
阅读 85
收藏 0

测试执行顺序

由于设计原因,JUnit不会特别指定测试方法调用的执行顺序。到目前为止,这些方法只是按照反射API返回的顺序调用的。然而,使用JVM 的指令顺序返回是一种不太明智的做法。因为JVM平台也是没有指定任何特定的顺序,其实JDK 返回或多或少是有点随机性的。当然,一个好的测试方法是不会假设有任何的顺序的,但是,有些时候,我们对业务测试会有这样的需求的,不能随机而来。毕竟,可预见的故障比某些平台上的随机故障要好,随机意味着故障将有很大的不确定和难排查性。 从JUnit4.11 开始,JUnit将默认使用一个确定性的,但不可预测的顺序。(MethodSorters.DEFAULT), 改变测试方法的执行顺序,只需要用**@FixMethodOrder** 注解到你的测试类中,以及一个可用的测试方法排序方式就好, 如:

  • @FixMethodOrder(MethodSorters.JVM) :这样就是按照JVM返回的顺序留下测试方法。此Order可能因运行而异(机器不同可能有差异)
  • **@FixMethodOrder(MethodSorters.NAME_ASCENDING) ** :按各种测试方法的方法的名称,在字典序(按测试方法的字母来)。

举例

import org.junit.FixMethodOrder;
import org.junit.Test;
import org.junit.runners.MethodSorters;

@FixMethodOrder(MethodSorters.NAME_ASCENDING)
public class TestMethodOrder {

    @Test
    public void testA() {
        System.out.println("first");
    }
    @Test
    public void testB() {
        System.out.println("second");
    }
    @Test
    public void testC() {
        System.out.println("third");
    }
}

执行结果:

first
second
third
  • 无论我把A B C 这三个方法如何打乱,都是这个结果,按字母升序来执行。
  • 如果是按JVM来,你多执行几次,就发现会有很大的随机性。
  • 如果是默认方法,那么顺序是可以确定的,但是执行过程就是不可以预见的。

© 著作权归作者所有

共有 人打赏支持
灯-塔
粉丝 2
博文 39
码字总数 63914
作品 0
广州
程序员
Gradle tip #3-Task顺序

原文链接 我注意到我在使用Gradle的时候遇到的大多数问题都是和task的执行顺序有关的。很明显如果我的构建会工作的更好如果我的task都是在正确的时候执行。下面我们就深入了解一下如何更改t...

一配
2015/09/21
242
0
赵勇奎/OCUnitPlus

###什么是OCUnitPlus OCUnitPlus是一个扩展OCUnit的项目,Xcode自带的单元测试框架使用的开源项目OCUnit,但是OCUnit的功能比较简单,不支持诸如异步模型、执行顺序等功能。 ###OCUnitPlus的...

赵勇奎
2013/08/21
0
0
测试基础介绍

迅速找出重要程序问题 1.首先测试经过变更的部分,然后测试没有变化的部分,修改和更改都意味着新的风险 2.首先测试核心功能,然后测试辅助功能,测试产品所完成的关键和常用功能,测试完成产...

测试猴
01/02
0
0
测试你的前端代码 - part1(介绍篇)

本文作者:Gil Tayar 编译:胡子大哈 翻译原文:http://huziketang.com/blog/posts/detail?postId=58d3dcb87413fc2e8240855a 英文连接:Testing Your Frontend Code : Part I (Introduction......

胡子大哈
2017/03/23
0
0
Delphi initialization和finalization

1 initialization和finalization 测试办法:启动一个控制台程序,因为一般的application有太多的单元引用,可能会造成一些调试上的麻烦 经过测试,大致结果可能是这样的 加载顺序与project及...

geek_loser
2014/11/21
0
0

没有更多内容

加载失败,请刷新页面

加载更多

docker run 创建一个新的容器并运行一个命令

docker run常用命令 docker run :创建一个新的容器并运行一个命令 语法:docker run [OPTIONS] IMAGE [COMMAND] [ARG...] 1.OPTIONS说明 -t:为容器重新分配一个伪输入终端,通常与 -i 同时使...

lwenhao
4分钟前
0
0
安装Win出现无法创建新的分区也找不到现有的分区解决方案

无法创建新的分区也找不到现有的分区 ### 首先在安装界面按下 Shift+F10### 在出现的CMD界面输入: diskpart 进入磁盘管理工具diskpart### 可以输入 : list disk 查看磁盘列表l...

Kxvz
7分钟前
0
0
关于 @ngrx/Store 下 obj 的扩展问题

昨天做 task 的时候,遇到了一个问题。 TypeError: can't define property "x": "obj" is not extensible 而我的代码是 public txTiles: Array<TransactionFilterTile>; constructor(priv......

IrisHuang
9分钟前
0
0
presto内存管理及调优

内存池 Presto有三种内存池,分别为GENERAL_POOL、RESERVED_POOL、SYSTEM_POOL。这三个内存池占用的内存大小是由下面算法进行分配的: builder.put(RESERVED_POOL, new MemoryPool(RESERVED...

张欢19933
10分钟前
0
0
Mysql5.7服务版安装

步骤1: 勾选同意协议 步骤2:选择Server only模式 步骤3:选择安装目录 步骤4:执行文件 步骤5:端口号与用户配置 步骤6:选择标准系统用户 Finish后,安装完成。...

lyle_luo
10分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部