Junit测试用例按顺序执行_junit test执行顺序-程序员宅基地

技术标签: JavaApp  junit  测试  执行顺序  

Junit测试用例执行按顺序执行有3种方法可以实现,缺省地,testcase执行的时候不是按函数编写顺序执行的。

1、数字编码法

要定义一组测试用例按顺序执行,testcase(测试案例)函数名前缀相同,末尾为数字,则该组测试案例将按数字顺序执行。比如有testFirst1, testFirst2, testFirst3三个测试案例,则三个用例的执行顺序为:

testFirst1>testFirst2>testFirst3

import java.util.logging.Logger;

import org.junit.BeforeClass;
import org.junit.Test;

public class Test4 {
    private static final Logger LOG = Logger.getLogger(Test4.class.getName());

	@BeforeClass
	static public void beforeTest(){
		System.out.println("Method beforeTest invoked!");
		LOG.info("Method beforeTest invoked!");
	}
	
	@Test
	public void testa1(){
		System.out.println("Method test1 invoked!");
		LOG.info("Method test1 invoked!");
	}
	
	@Test
	public void testd2(){
		System.out.println("Method ctest2 invoked!");
		LOG.info("Method ctest2 invoked!");
	}
	
	@Test
	public void testc3(){
		System.out.println("Method dtest3 invoked!");
		LOG.info("Method dtest3 invoked!");
	}
	
	@Test
	public void testb4(){
		System.out.println("Method btest4 invoked!");
		LOG.info("Method btest4 invoked!");
	}
	
	@Test
	public void testFirst3(){
		System.out.println("Method First3 invoked!");
		LOG.info("Method First3 invoked!");
	}
	
	@Test
	public void testFirsa1(){
		System.out.println("Method First1 invoked!");
		LOG.info("Method First1 invoked!");
	}	
	
	@Test
	public void testFirsb1(){
		System.out.println("Method Firstb1 invoked!");
		LOG.info("Method Firstb1 invoked!");
	}
} 

测试结果:

Method beforeTest invoked!
五月 27, 2017 10:07:02 上午 com.hf.junit.test.Test4 beforeTest
信息: Method beforeTest invoked!
Method test1 invoked!
五月 27, 2017 10:07:02 上午 com.hf.junit.test.Test4 testa1
信息: Method test1 invoked!
Method btest4 invoked!
五月 27, 2017 10:07:02 上午 com.hf.junit.test.Test4 testb4
信息: Method btest4 invoked!
Method dtest3 invoked!
五月 27, 2017 10:07:02 上午 com.hf.junit.test.Test4 testc3
信息: Method dtest3 invoked!
Method ctest2 invoked!
五月 27, 2017 10:07:02 上午 com.hf.junit.test.Test4 testd2
信息: Method ctest2 invoked!
Method First1 invoked!
五月 27, 2017 10:07:02 上午 com.hf.junit.test.Test4 testFirsa1
信息: Method First1 invoked!
Method Firstb1 invoked!
五月 27, 2017 10:07:02 上午 com.hf.junit.test.Test4 testFirsb1
信息: Method Firstb1 invoked!
Method First3 invoked!
五月 27, 2017 10:07:02 上午 com.hf.junit.test.Test4 testFirst3
信息: Method First3 invoked!

如果测试案例函数名尾数不是数字,则无序执行:

import java.util.logging.Logger;

import org.junit.Test;

public class Test2 {

    private static final Logger LOG = Logger.getLogger(Test2.class.getName());
    
    @Test
    public void testFirst() throws Exception {
    	System.out.println("------1--------");
        LOG.info("------1--------");
    }

    @Test
    public void testSecond() throws Exception {
    	System.out.println("------2--------");
        LOG.info("------2--------");

    }

    @Test
    public void testThird() throws Exception {
    	System.out.println("------3--------");
        LOG.info("------3--------");
    }
    
    @Test
    public void testFour() throws Exception {
    	System.out.println("------4--------");
        LOG.info("------4--------");
    }

}

测试结果:

------1--------
五月 27, 2017 10:08:16 上午 com.hf.junit.test.Test2 testFirst
信息: ------1--------
------3--------
五月 27, 2017 10:08:16 上午 com.hf.junit.test.Test2 testThird
信息: ------3--------
------4--------
五月 27, 2017 10:08:16 上午 com.hf.junit.test.Test2 testFour
信息: ------4--------
------2--------
五月 27, 2017 10:08:16 上午 com.hf.junit.test.Test2 testSecond
信息: ------2--------

2、显式指定按字母顺序执行法

通过@FixMethodOrder(MethodSorters.NAME_ASCENDING)注解声明按字母顺序执行:

import java.util.logging.Logger;

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

@FixMethodOrder(MethodSorters.NAME_ASCENDING)
public class Test2FixOrder {

    private static final Logger LOG = Logger.getLogger(Test2FixOrder.class.getName());
    
    @Test
    public void testFirst() throws Exception {
    	System.out.println("------1--------");
        LOG.info("------1--------");
    }

    @Test
    public void testSecond() throws Exception {
    	System.out.println("------2--------");
        LOG.info("------2--------");

    }

    @Test
    public void testThird() throws Exception {
    	System.out.println("------3--------");
        LOG.info("------3--------");
    }
    
    @Test
    public void testFour() throws Exception {
    	System.out.println("------4--------");
        LOG.info("------4--------");
    }

}

测试结果:

------1--------
五月 27, 2017 10:09:22 上午 com.hf.junit.test.Test2FixOrder testFirst
信息: ------1--------
------4--------
五月 27, 2017 10:09:22 上午 com.hf.junit.test.Test2FixOrder testFour
信息: ------4--------
------2--------
五月 27, 2017 10:09:22 上午 com.hf.junit.test.Test2FixOrder testSecond
信息: ------2--------
------3--------
五月 27, 2017 10:09:22 上午 com.hf.junit.test.Test2FixOrder testThird
信息: ------3--------
说明:@FixMethodOrder执行顺序声明有3种情形:除上述按字母顺序执行“@FixMethodOrder(MethodSorters.NAME_ASCENDING)”外,还有2种@FixMethodOrder(MethodSorters.DEFAULT),@FixMethodOrder(MethodSorters.JVM),其中JVM是按函数出现的顺序反向执行(测试结果如此),DEFAULT方式则无序执行。

3、测试套件法

使用测试套件来组织测试顺序,测试用例的执行过程按其添加到测试套件(TestSuit)中的顺序来执行,即可将TestSuit视作一个TestCase的数组,从数组索引0的位置开始执行。

import junit.framework.Test;
import junit.framework.TestCase;
import junit.framework.TestSuite;

public class TestSuit1 extends TestCase {

	public TestSuit1(String name) {
		super(name);
	}

	public void test1() throws Exception {
		System.out.println("------ Test case 1 -------");
	}

	public void ctest2() {
		System.out.println("------ Test case 2 -------");
	}

	public void dtest3() {
		System.out.println("------ Test case 3 -------");
	}

	public void btest4() {
		System.out.println("------ Test case 4 -------");
	}

	public static Test suite() {
		TestSuite suite = new TestSuite();
		suite.addTest(new TestSuit1("test1"));
		suite.addTest(new TestSuit1("dtest3"));
		suite.addTest(new TestSuit1("ctest2"));		
		suite.addTest(new TestSuit1("btest4"));
		return suite;
	}
}

测试结果:

------ Test case 1 -------
------ Test case 3 -------
------ Test case 2 -------
------ Test case 4 -------






版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/hongweigg/article/details/72778638

智能推荐

目录 (◕ᴗ◕)_airbase包名-程序员宅基地

文章浏览阅读1.2k次,点赞4次,收藏6次。为了方便各位读者对文章内标题的浏览以及阅读,制定了下这个目录,各位读友如果有哪里格式格式欠调可以欢迎提意见!Kali工具无线攻击 - 无线攻击 - 无线攻击 - fern-wifi-cracker(图形化无线密码破解工具)无线攻击 - airserv-ng(无线网卡服务器)无线攻击 - easside-ng(通过WEP加密的Ap进行通信,而不需要秘钥)无线攻击 - tkiptu..._airbase包名

Optional int parameter 'xx' is present but cannot be translated into a null value_optional int parameter 'year' is present but canno-程序员宅基地

文章浏览阅读2.8w次,点赞11次,收藏5次。今天在controller中获取post参数时,报了如下错误{ "timestamp": "2018-09-07T07:25:51.524+0000", "status": 500, "error": "Internal Server Error", "message": "Optional int parameter 'id' is present but c..._optional int parameter 'year' is present but cannot be translated into a nul

java.lang.IllegalStateException: Could not initialize Service.-程序员宅基地

文章浏览阅读1.8k次。xfire-all-1.2.6.jar做的服务端,wsimport 自动生成的客户端如果客户端引用的jar包中有xfire-all-1.2.6.jar,则会发生下面这个异常 java.lang.IllegalStateException: Could not initialize Service. Exception in thread "main" java.la..._exception in thread "main" java.lang.illegalstateexception: could not initia

深入浅出移动直播技术(一)-程序员宅基地

文章浏览阅读451次。2016年被誉为“移动直播元年”,中国的网络直播用户已经超过3亿,百度,腾讯,淘宝,网易等都有自己的直播平台。本文主要分享一些移动直播的相关技术点。 一、什么是视频 任何一个视频文件,从结构上讲,都是这样一种组成方式: -由图像和音频构成最基本的内容元素;-图像经过视频编码压缩格式处理(通常是 H.264);-音频经过音频编码压缩格式处理(例如 AAC);-..._深入浅出直播

php之unset用法_php 语法 unset-程序员宅基地

文章浏览阅读1k次。unset() — 释放给定的变量。void unset ( mixed $var [, mixed $... ] )unset() 销毁指定的变量。unset() 在函数中的行为会依赖于想要销毁的变量的类型而有所不同。如果在函数中 unset() 一个全局变量,则只是局部变量被销毁,而在调用环境中的变量将保持调用 unset() 之前一样的值。<?phpfunc..._php 语法 unset

强引用、软引用、弱引用、虚引用的区别 -Java_强引用软引用弱引用虚引用的区别-程序员宅基地

文章浏览阅读506次,点赞2次,收藏3次。Java中为何要分别定义强引用、软引用、弱引用、虚引用四种引用类型?我们对于对象的定义不能只局限于“引用”和“未被引用”两种状态,因为我们还存在几种引用类型能描述这样一类对象:当内存空间还足够时,仍保留在内存之中,如果内存空间在进行垃圾收集后仍然非常紧张,那就可以抛弃这些对象(这类对象应用在很多系统的缓存功能上)。在JDK 1.2版之后,Java对引用的概念进行了扩充,将引用分为强引用(Strongly Re-ference)、软引用(Soft Reference)、弱引用(WeakReference)_强引用软引用弱引用虚引用的区别

随便推点

Android 动态添加textView或EditText,并获取输入数据_textviews = new textvie textviews[0]-程序员宅基地

文章浏览阅读3k次。Android 动态添加textView或EditText,并获取输入数据menglongma 问题引入 Android开发中往往需要动态创建诺干个同类控件,或对他们设置点击事件或批量获取他们的值,下面提供我在开发中所使用的一种参考。 动态创建多个textView,这里描述一个页面取名为:test.xml,现在在Id为MyTable的控件里插入多个textview控件 <?xml version="1.0" encoding="utf-8"?><Linear._textviews = new textvie textviews[0]

程序设计原则——局部性原理_程序的局部性原理实验分析 for(i=0;i<1024;i++) for(j=0;j<1024;j+-程序员宅基地

文章浏览阅读5k次。存储器系统是一个具有不同容量、成本和访问时间的存储设备的层次结构:CPU寄存器-》高速缓冲存储器-》主存储器-》磁盘-》通过网络连接的其他存储设备。SRAM静态,一般作为高速缓冲存储器。DRAM动态,一般作为大容量的主存储器每次CPU和主存之间的数据传送都是通过一些列的步骤完成的,这些步骤称为总线事务。读事务从主存传送数据到CPU,写事务从CPU传送数据到主存。局部性:一般较好的程序都有较好的局部性,也就是说,它们倾向于引用的数据项邻近于其他最近引用过的数据项,或者邻近于最近自我引用过的数据项。对应的就是空_程序的局部性原理实验分析 for(i=0;i<1024;i++) for(j=0;j<1024;j++) test[j][i]=

转载:SSD: Single Shot MultiBox Detector 检测单张图片_ssd单张图片检测-程序员宅基地

文章浏览阅读220次。版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Jesse_Mx/article/details/52965281 ..._ssd单张图片检测

【Matlab系列】常用基础数据类型转换_matlab sym 转字符串-程序员宅基地

文章浏览阅读4.1k次,点赞2次,收藏11次。DATE: 2019-5-311、string转换成sym类型2、sym类型转换成string3、string转换成函数句柄4、函数句柄转换成string5、string转换成数值类型_matlab sym 转字符串

相对路径和绝对路径及根目录(2013-06-24 12:00)_相对目录和根目录-程序员宅基地

文章浏览阅读4.3k次。总结:根目录百科名片根目录指逻辑驱动器的最上一级目录,它是相对子目录来说的。打开“我的电脑”,双击C盘就进入C盘的根目录,双击D盘就进入D盘的根目录。其它类推。根目录在文件系统建立时即已被创建,其目的就是存储子目录(也称为文件夹)或文件的目录项。需要注意的是,由于现今U盘病毒盛行,进入U盘的根目录最好不要双击,而建议用鼠标右键单击U盘图标,然_相对目录和根目录

Windows下运行pip安装jupyter notebook_jupyter的pip在哪-程序员宅基地

文章浏览阅读1.1w次,点赞4次,收藏14次。首先,安装jupyter notebook需要运行pip命令,pip命令基于python,确定电脑已安装python进入命令行,把目录切换到python的安装目录下的Script文件夹下,运行easy_install.exe pip,如下图所示::安装结束后,可输入pip命令查看,显示如图:pip安装成功后,在命令行输入pip install jupyter,我在等待安装过程中..._jupyter的pip在哪