在编码的过程中,需要单元测试,写测试用例,junit就能派上用场。我现在把一个测试方法当作一个测试用例。
在早期junit3中,需要继承junit.framework.TestCase,这里有诸多限制:比如测试的方法名必须以test开头,setUp、tearDown方法名也是固定的。setUp、tearDown的用途就是统一给多个测试方法准备数据、清理现场,减少了重复工作,在测试术语中他们叫测试夹具。一个完整的测试用例:先执行setUp,再执行测试方法,最后执行tearDown。各个测试用例之间是没有顺序的。
在现在的junit4中,扩展了几个注解,不需要继承junit.framework.TestCase:
1、@BeforeClass:放在一个public static void方法上,这个方法最先执行,而且只执行一次。可以用于加载一些静态配置文件,环境设置等。
2、@AfterClass:放在一个public static void方法上,这个方法最后执行,而且只执行一次。可用于清理数据、环境等。在某些情况下,环境的设置与清理只需要执行一次,可以考虑使用@BeforeClass、@AfterClass,相对与@Before、@After来说,效率有所提高。
3、@Before:放在一个public void方法上,在每个测试方法执行之前执行。一般的用途为测试方法准备测试数据。
4、@After:放在一个public void方法上,在每个测试方法执行之后执行。一般的用途为清理现场,不干扰下一个测试方法的执行。
5、@Test:放在一个public void方法上,这是执行测试的方法,是测试主体。
6、@Ignore:可以放在测试方法上,忽略该测试方法不执行;也可以放在测试类上,整个测试类的所有测试方法将会忽略掉,不执行。
7、@FixMethodOrder:放在测试类上。某些情况下,如果需要测试方法按照一定的顺序执行,可以加上他。一般来说,测试方法之间是相互独立的,没有执行顺序的要求。
虽然加注解的方法名可以任意写其他合法的方法名,但最好还是表意,便于阅读理解。详见代码:
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 在测试方法之后执行 最后执行
原文:http://my.oschina.net/u/2007041/blog/506769