Junit 4.0 学习笔记

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分别会执行[color=red]两[/color]次,有多少个测试方法就会分别执行[color=red]多少[/color]次
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分别都只会执行[color=red]一[/color]次,有多少个测试方法都只会分别执行[color=red]一[/color]次
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}三种情况
附件包括测试源代码
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值