JUnit的annotation

3 篇文章 0 订阅

前面已经写过一个例子了,但是那个例子只是入门,本例主要说说JUnit中用到的annotation,其实在上例中已经使用过了,那就是测试方法时用到的@Test。上例中讲到了JUnit测试的书写规范,包括包名(原包名.test),类名(原类名Test),其实还有方法名(test原方法名),这一点在上例中没讲到,因为上例使用的是eclipse自动创建Test Case,这是需要注意的。另外需要说明的一点是本例和上例使用的都是JUnit4。

1.普通方法使用的annotation为@Test,他有2个可选参数,形式为@Test(expected=xx,timeout=yy),其中xx表示Class<? extends Throwable> org.junit.Test.expected(),相当于抛出异常,对发生异常的方法使用此参数则测试能够通过;yy表示long org.junit.Test.timeout(),表示超时的毫秒数,用到测试方法的执行时间。实例如下:

待测试的JUnit类

package com.baosight.junit;

/**
 * 
* <p>Title:JUnit </p>
* <p>Description:TODO </p>
* <p>Company: </p> 
* @author yuan 
* @date 2016-4-12 下午9:49:19
 */
public class JUnit {
/**
 * 求和
 * @Title: add 
 * @Description: TODO
 * @param x
 * @param y
 * @return 
 * @return int  
 * @author yuan
 * @date 2016-4-12下午9:49:39
 */
public int add(int x,int y){
	return x+y;
}
/**
 * 除法
 * @Title: divide 
 * @Description: TODO
 * @param x
 * @param y
 * @return 
 * @return int  
 * @author yuan
 * @date 2016-4-13下午8:52:49
 */
public int divide(int x,int y){
	return x/y;
}
}
测试类JUnitTest

package com.baosight.junit.test;

import static org.junit.Assert.*;
import static org.hamcrest.Matchers.*;

import org.junit.Ignore;
import org.junit.Test;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.After;
import org.junit.AfterClass;

import com.baosight.junit.JUnit;

/**
 * <p>Title:IUnitTest </p>
 * <p>Description:TODO </p>
 * <p>Company: </p> 
 * @author yuan 
 * @date 2016-4-12 下午9:51:22*/
public class IUnitTest {
	/**
	 * 在所有方法之前执行
	 * @Title: beforeClass 
	 * @Description: TODO 
	 * @return void  
	 * @author yuan
	 * @date 2016-4-13下午9:36:13
	 */
	@BeforeClass
	public static void beforeClass(){
		System.out.println("BeforeClass");
	}
	/**
	 * 在所有方法之后执行
	 * @Title: afterClass 
	 * @Description: TODO 
	 * @return void  
	 * @author yuan
	 * @date 2016-4-13下午9:36:45
	 */
	@AfterClass
	public static void afterClass(){
		System.out.println("AfterClass");
	}
	/**
	 * 在每个方法执行之前执行
	 * @Title: before 
	 * @Description: TODO 
	 * @return void  
	 * @author yuan
	 * @date 2016-4-13下午9:37:02
	 */
	@Before
	public void before(){
		System.out.println("Before");
	}
	/**
	 * 在每个方法执行之后执行
	 * @Title: after 
	 * @Description: TODO 
	 * @return void  
	 * @author yuan
	 * @date 2016-4-13下午9:37:42
	 */
	@After
	public void after(){
		System.out.println("After");
	}
	/**
	 * 测试
	 * @Title: testAdd 
	 * @Description: TODO 
	 * @return void  
	 * @author yuan
	 * @date 2016-4-12下午9:52:19
	 */
	@Ignore//此方法被忽略,不执行
	@Test
	public void testAdd() {
		int z = new JUnit().add(3, 5);
		assertEquals(8, z);//成功
		assertThat(z, is(8));//成
		assertThat(z, allOf(greaterThan(3),lessThan(9)));//成功
		assertThat(z, anyOf(greaterThan(8),lessThan(9)));//失败
	}
	/**
	 * 测试
	 * @Title: testDivide 
	 * @Description: TODO 
	 * @return void  
	 * @author yuan
	 * @date 2016-4-13下午8:54:06
	 */
	
	@Test(expected=java.lang.ArithmeticException.class,timeout=1)
	public void testDivide() {
		int z = new JUnit().divide(8, 0);
		assertEquals(4, z);//成功
		assertThat(z, is(4));//成
		assertThat(z, allOf(greaterThan(3),lessThan(9)));//成功
		assertThat(z, anyOf(greaterThan(8),lessThan(8)));//失败
	}
}
执行效果如下:




2.关于@Ignore的使用,表示忽略该方法的执行,比如本例中testAdd方法就使用了@Ignore,从运行结果可以看西湖其未执行。该annotation的现实意义在于对于那些没有实现的方法进行标注不予测试,方便模块化管理。

3.关于@Before和@After的使用,他们在每个测试方法的执行之前和执行之后都会各自执行一次。本例中共有2个测试方法,由于使用@Ignore忽略了一个,所以@Before和@After各执行1次,如果执行了2个测试方法,则@Before和@After各执行2次。

4.关于@BeforeClass和@AfterClass的使用,此2方法分别在所有方法执行之前和所有方法执行之后分别执行1次。使用它们的现实意义在于,对于测试一些比较复杂的方法时做一些预处理,比如资源的加载和释放,比如jdbc连接数据库的相关配置就可以使用@BeforeClass和@AfterClass进行预处理,从而优化执行流程,提高测试的效率。值得注意的是二者都是静态方法,即static。

以上即为JUnit常用的annotation,需要根据实际情况进行灵活地选用。



  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值