Test execution order

本文介绍了JUnit中测试方法执行顺序的控制方式,并演示了不同注解对方法执行顺序的影响。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

刚开始的时候,JUnit并没有规定测试方法的调用执行顺序。方法通过映射的API返回的顺序进行调用。然而,使用JVM顺序是不明智的,因为Java平台没有规定任何特定的顺序,事实上JDK7或多或少的返回的是随机顺序。大部分写的好的测试代码不会假定一个顺序,在特定的平台上一个可预言的失败比一个随机的失败更好。

从4.11版本开始,如果想要改变测试执行顺序,只要简单的加一个 @FixMethodOder 注释就可以。

目前比较常见的有三种:

@FixMethodOrder(MethodSorters.DEFAULT):默认顺序。由方法名的哈希码值决定执行顺序。由于哈希码的生成和OS有关,所以不用的OS可能会出现不一样的执行顺序。在某一操作系统上,多次执行的顺序不变。

@FixMethodOrder(MethodSorters.JVM):由JVM来决定执行顺序。当然执行顺序随着每一次的测试可能会有所不用。

@FixMethodOrder(MethodSorters.NAME_ASCENDING):由方法名的字典顺序来决定执行顺序。

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

//@FixMethodOrder(MethodSorters.DEFAULT) 
//@FixMethodOrder(MethodSorters.NAME_ASCENDING) 
//@FixMethodOrder(MethodSorters.JVM) 
public class TestExecuteOrder { 

  @Test    
  public void test03Third() {        
      System.out.println("test03"); 
  } 
  
  @Test    
  public void test01First() {        
      System.out.println("test01"); 
  } 
  
  @Test    
  public void test02Second() {        
      System.out.println("test02"); 
  } 
} 

执行结果如下

1.什么都不加:

test02
test01
test03

2. @FixMethodOrder(MethodSorters.DEFAULT) :

test02
test01
test03
3. @FixMethodOrder(MethodSorters.NAME_ASCENDING):

test01
test02
test03

4. @FixMethodOrder(MethodSorters.JVM):

test03
test01
test02

或者

test02
test01
test03

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值