junit 4x 相比 junit3.8大量使用了 annotation .
主程序
测试程序
测试方法在junit4.x中必顺是public void ,但测试方法不做要求,不像3.8一样以test开头.类也不用继承TestCase
1.简单测试
2.指定异常
3.指定程序运行的延时
4.@Before,@After
注init,destory分别会执行[color=red]两[/color]次,有多少个测试方法就会分别执行[color=red]多少[/color]次
5 @BeforeClass,@AfterClass
6 @Ignore
7@Suite (批量测试)
新增主程序
新增测试程序
使用批量测试
junit 将同时执行TestCompalbe,TestCompable2中的全部测试方法
同时SuitTest 还可以包括在其他的批量测试程序中
如@Suite.SuiteClasses({SuitTest1.class,SuitTest2.class})这样就可以方便去测试包,和JAR的测试程序.
@RunWith(Suite.class) 表示利用那种运行器,同时还可以自定义运行器超类(org.junit.runner.Runner)
8 私有方法测试
可以使用类的反射机制去加载Class,再获取方法.再去测试这个方法
9 组合查询
测试程序
以上程序将测试{3,2,1},{4,2,2},{-1,-1,0}三种情况
附件包括测试源代码
主程序
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}三种情况
附件包括测试源代码