junit 的几个注解

  在编码的过程当中,须要单元测试,写测试用例,junit就能派上用场。我如今把一个测试方法看成一个测试用例。
java

  在早期junit3中,须要继承junit.framework.TestCase,这里有诸多限制:好比测试的方法名必须以test开头,setUp、tearDown方法名也是固定的。setUp、tearDown的用途就是统一给多个测试方法准备数据、清理现场,减小了重复工做,在测试术语中他们叫测试夹具。一个完整的测试用例:先执行setUp,再执行测试方法,最后执行tearDown。各个测试用例之间是没有顺序的。     
spring

  在如今的junit4中,扩展了几个注解,不须要继承junit.framework.TestCase单元测试

一、@BeforeClass:放在一个public static void方法上,这个方法最早执行,并且只执行一次。能够用于加载一些静态配置文件,环境设置等。测试

二、@AfterClass:放在一个public static void方法上,这个方法最后执行,并且只执行一次。可用于清理数据、环境等。在某些状况下,环境的设置与清理只须要执行一次,能够考虑使用@BeforeClass、@AfterClass,相对与@Before、@After来讲,效率有所提升。ui

三、@Before:放在一个public void方法上,在每一个测试方法执行以前执行。通常的用途为测试方法准备测试数据。编码

四、@After:放在一个public void方法上,在每一个测试方法执行以后执行。通常的用途为清理现场,不干扰下一个测试方法的执行。spa

五、@Test放在一个public void方法上,这是执行测试的方法,是测试主体
.net

六、@Ignore:能够放在测试方法上,忽略该测试方法不执行;也能够放在测试类上,整个测试类的全部测试方法将会忽略掉,不执行。code

七、@FixMethodOrder:放在测试类上。某些状况下,若是须要测试方法按照必定的顺序执行,能够加上他。通常来讲,测试方法之间是相互独立的,没有执行顺序的要求。blog

八、@Parameters:放在一个public static方法上,并返回测试数据集合。在参数化测试中用到这个注解,配合@RunWith(Parameterized.class)一块儿使用。详细介绍见 junit4 测试参数化  

九、@SuiteClasses:放在测试类上。这里的测试类用于组合其余多个测试类一块儿执行,好比如今有10个测试类,咱们想执行其中的3个测试类,这个注解就能够知足咱们的要求。配合@RunWith(Suite.class)一块儿使用。

十、@Category:放在测试方法或测试测试类上,配合@RunWith(Categories.class)、@SuiteClasses一块儿使用;Categories也是一个Suite。和注解@SuiteClasses相似,不过@Category能够更细粒度的控制组合,能够按测试方法组合在一块儿:好比A测试类有5个测试方法,B测试类有3个测试方法,@Category能够组合A中的两个方法、B中的一个方法。

十一、@RunWith:放在测试类上。通常咱们要用到junit的一些增强功能,须要用到他:好比组合测试@RunWith(Suite.class)、参数化测试@RunWith(Parameterized.class)、集成spring测试@RunWith(SpringJUnit4ClassRunner.class)等等。

十二、@Rule:规则注解,放在public属性上,而且直接或者间接实现了org.junit.rules.TestRule,能够灵活的定义一些规则:好比:org.junit.rules.ExpectedException可用于异常测试。详细介绍见 junit4 测试异常

   虽然加注解的方法名能够任意写其余合法的方法名,但最好仍是表意,便于阅读理解

package cn.wonhigh.o2o.test;

import org.junit.After;
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.FixMethodOrder;
import org.junit.Ignore;
import org.junit.Test;
import org.junit.runners.MethodSorters;

// 指定测试方法的执行顺序
@FixMethodOrder(MethodSorters.NAME_ASCENDING)
public class Junit4Test {
	
	// 方法名任意
	@BeforeClass
	public static void setUpBeforeClass() throws Exception {
		System.out.println("最早执行");
	}
	
	// 方法名任意
	@AfterClass
	public static void tearDownAfterClass() throws Exception {
		System.out.println("最后执行");
	}
	
	// 方法名任意
	@Before
	public void setUp() throws Exception {
		System.out.println("在测试方法以前执行");
	}
	
	// 方法名任意
	@After
	public void tearDown() throws Exception {
		System.out.println("在测试方法以后执行");
	}
	
	// 方法名任意
	@Test
	public void method1() {
		System.out.println("测试方法1");
	}
	
	// 方法名任意
	@Test
	public void method2() {
		System.out.println("测试方法2");
	}

	// 该方法将被忽略调,不会执行
	@Ignore
	@Test
	public void method3() {
		System.out.println("测试方法3");
	}

}

输出:

最早执行
在测试方法以前执行
测试方法1
在测试方法以后执行
在测试方法以前执行
测试方法2
在测试方法以后执行
最后执行
相关文章
相关标签/搜索