在编码的过程中,需要单元测试,写测试用例,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 在测试方法之后执行 最后执行