文档章节

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

灯-塔
 灯-塔
发布于 2017/09/10 21:57
字数 699
阅读 129
收藏 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来,你多执行几次,就发现会有很大的随机性。
  • 如果是默认方法,那么顺序是可以确定的,但是执行过程就是不可以预见的。

© 著作权归作者所有

共有 人打赏支持
灯-塔
粉丝 4
博文 39
码字总数 63914
作品 0
广州
程序员
私信 提问
测试异步代码

如果说异步代码不好写是共识的话,那么写异步代码测试用例就更难了。最近我刚刚完成了一个 Flaky 测试,所以想和大家分享一些关于写异步测试用例的想法。 这篇文章里,我们会探索一个关于异步...

oschina
2015/10/08
3.6K
3
赵勇奎/OCUnitPlus

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

赵勇奎
2013/08/21
0
0
Gradle tip #3-Task顺序

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

一配
2015/09/21
242
0
Delphi initialization和finalization

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

geek_loser
2014/11/21
0
0
Junit测试方法保证执行顺序

由于需要做自动化测试,所以需要比较完善的单元测试。但是又因为某些测试的执行依赖另外一个测试产生的结果,所以希望所写的test case按照自己希望的顺序来执行。 随后博主查阅资料发现了Fix...

winvv
2018/08/21
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Git代码防丢指南

我们在日常使用Git的过程中经常会发生一些意外情况,如果处理不当,则可能会出现代码丢失的假象。本文将针对IDEA&Git日常开发中的一些场景,为你层层拨开迷雾,解析常见的错误及其发生原因,...

joymufeng
27分钟前
2
0
传统IDC部署网站(三)

16. chown命令 chown 用来更改一个文件或者目录的所有者护着所属组 -R 级联更改一个目录下所有的目录和文件 chown user1:users 1.txtchown user1.users 1.tx useradd 添加用户的命令 user...

miko0089
38分钟前
1
0
来玩一下Java设计模式之命令模式

wiki上的描述 Encapsulate a request as an object, thereby allowing for the parameterization of clients with different requests, and the queuing or logging of requests. It also al......

小刀爱编程
39分钟前
1
0
Optional类的简单了解

import java.util.Optional;/** * @author hanliwei */public class OptionalTest { /** * Optional 类是一个可以为null的容器对象。如果值存在则isPresent()方法会返...

wind2012
47分钟前
1
0
如何写出好的单元测试?

大家都知道,开发软件的时候为代码编写单元测试是很好的。但实际上,光有测试还不够,还要编写好的测试,这同样重要。 要做到这一点,考虑遵循一些固执的原则,对测试代码给予一些关爱: 1....

程序猿拿Q
56分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部