论坛首页 Java企业应用论坛

Junit 4.0 学习笔记

浏览 6244 次
精华帖 (2) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2009-06-10   最后修改:2009-06-11
junit 4x 相比 junit3.8大量使用了 annotation .

主程序
public class Compalbe {
	
  public int add(int a,int b){
	  return a+b;
  }
  
  public int div(int a,int b) throws Exception{
	   return a/b;
	    
	}

}


测试程序
测试方法在junit4.x中必顺是public void ,但测试方法不做要求,不像3.8一样以test开头.类也不用继承TestCase
1.简单测试
public class TestCompalbe {
	
	@Test
	public void testAdd(){
		Compalbe com = new Compalbe();
		int result = com.add(2, 2);
		Assert.assertEquals(3, result);
	}
	
	@Test
	public void testDiv() throws Exception{
		Compalbe com = new Compalbe();
		int result = com.div(2, 2);
		Assert.assertEquals(1,result);
	}

}

2.指定异常
public class TestCompalbe {
	//指定异常
         @Test(expected=Exception.class)
	public void testDiv() throws Exception{
		Compalbe com = new Compalbe();
		//除数为0异常
                  int result = com.div(2, 0);
		Assert.assertEquals(1,result);
	}

}

3.指定程序运行的延时
@Test(timeout=100)//如果超去这个时间则不通过
	public void testDiv() throws Exception{
		Compalbe com = new Compalbe();
		int result = com.div(2, 2);
		Thread.sleep(20);
		Assert.assertEquals(1,result);
	}

4.@Before,@After
public class TestCompalbe {
	Compalbe com = null;

         //@Before作用初始化测试方法相关资源
	@Before
	public void init() {
		System.out.println("init");
		com = new Compalbe();
	}

         //@After作用销毁测试方法相关资源
	@After
	public void destory() {
		System.out.println("destorys");
		com = null;
	}

	@Test
	public void testAdd() {
		int result = com.add(2, 2);
		Assert.assertEquals(4, result);
	}

	@Test
	public void testDiv() throws Exception {
		int result = com.div(2, 2);
		Assert.assertEquals(1, result);
	}

}

注init,destory分别会执行次,有多少个测试方法就会分别执行多少
5 @BeforeClass,@AfterClass
public class TestCompalbe {
	static Compalbe com = null;

         //@BeforeClass作用初始化测试方法相关资源(如:jdbc Connection)
	@BeforeClass
	public static void  init() {
		System.out.println("init");
		com = new Compalbe();
	}

         //@AfterClass作用销毁测试方法相关资源
	@AfterClass
	public static void  destory() {
		System.out.println("destorys");
		com = null;
	}

	@Test
	public void testAdd() {
		int result = com.add(2, 2);
		Assert.assertEquals(4, result);
	}

	@Test
	public void testDiv() throws Exception {
		int result = com.div(2, 2);
		Assert.assertEquals(1, result);
	}

}
注init,destory分别都只会执行次,有多少个测试方法都只会分别执行
6 @Ignore
        
@Test
	//测试程序将忽略些方法
         @Ignore
	public void testDiv() throws Exception {
		int result = com.div(2, 2);
		Assert.assertEquals(1, result);
	}

7@Suite (批量测试)
新增主程序
public class Compalbe2 {

	public int sub(int a,int b){
		return a-b;
	}
	
	public int mul(int a,int b){
		return a*b;
	}

}

新增测试程序
public class TestCompable2 {

	Compalbe2 com = null;

	@Before
	public void init() {
		com = new Compalbe2();
	}

	@After
	public void destory() {

	}

	@Test
	public void testMul() {
		int result = com.mul(3, 4);
		Assert.assertEquals(12, result);
	}

	@Test
	public void testSub() {
		int result = com.sub(3, 4);
		Assert.assertEquals(-1, result);
	}

}

使用批量测试
@RunWith(Suite.class)
@Suite.SuiteClasses({TestCompalbe.class,TestCompable2.class})
public class SuitTest {

}

junit 将同时执行TestCompalbe,TestCompable2中的全部测试方法
同时SuitTest 还可以包括在其他的批量测试程序中
如@Suite.SuiteClasses({SuitTest1.class,SuitTest2.class})这样就可以方便去测试包,和JAR的测试程序.
@RunWith(Suite.class) 表示利用那种运行器,同时还可以自定义运行器超类(org.junit.runner.Runner)

8 私有方法测试
可以使用类的反射机制去加载Class,再获取方法.再去测试这个方法
9 组合查询
  
  测试程序
  
//确认运行器
@RunWith(Parameterized.class)
public class ParameterizedTest {

	private int result;
	private int input1;
	private int input2;
	
	private Compalbe com = null;
	@Before
	public void init(){
		com = new Compalbe();
	}
	
	//准备参数
          //方法为 public static ,返回类型为Collection
         @Parameters
	public static Collection<Object[]> data() {
		
		//参数列表为二维数组,参数的位置为构造函数对应
                     //如{3,2,1},{3是结果对应result参数,2对应input1,1对应input2
                  Object[][] objarr = new Object[][]{{3,2,1},{4,2,2},{-1,-1,0}};
		
		return Arrays.asList(objarr);
	}
	
	
	public ParameterizedTest(int result,int input1,int input2){
		this.result  = result;
		this.input1 = input1;
		this.input2 =  input2;
	}
	
         //测试方法
	@Test
	public void testAdd(){
		Assert.assertEquals(result, com.add(input1, input2));
	}
	

}

以上程序将测试{3,2,1},{4,2,2},{-1,-1,0}三种情况
附件包括测试源代码
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics