Junit框架 ,本质就是一个jar包,它提供了规则,@test用例 @Before用例的前置条件,@After用例的后置条件,@BeforeClass类的初始化条件,@AfterClass类的清理条件,suite 管理用例,提供一个面板查看用例的通过与否,提供断言机制
具体案例如下:
package com.my.junit4;
public class Calculator {
public int divide(int a,int b) {
if(b == 0) {
return 0;
}
return a/b;
}
}
使用Junit对上面的类进行测试:
package com.my.junit4;
import static org.junit.Assert.*;
import org.junit.After;
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
public class CalcBaseTest {
@BeforeClass
public static void setUpBeforeClass() throws Exception {
System.out.println("BeforeClass");
}
@AfterClass
public static void tearDownAfterClass() throws Exception {
System.out.println("AfterClass");
}
@Before
public void setUp() throws Exception {
System.out.println("Before");
}
@After
public void tearDown() throws Exception {
System.out.println("After");
}
@Test
public void test1() {
System.out.println("test1");
Calculator ca = new Calculator();
assertEquals(5, ca.divide(10, 2));
}
@Test
public void test2() {
System.out.println("test2");
Calculator ca = new Calculator();
assertEquals(0, ca.divide(10, 0));
}
}
运行结果如下:
运行结果:
若是要对用例集进行测试,加一个Suite,右键类所在的包->new->other->Java->Junit->Junit Test Suite,
如下可对CalcTest.class和CalcTest2.class中所有的方法进行测试
package com.my.io.demo;
import org.junit.runner.RunWith;
import org.junit.runners.Suite;
import org.junit.runners.Suite.SuiteClasses;
@RunWith(Suite.class)
@SuiteClasses({ CalcTest.class, CalcTest2.class })
public class AllTests {
}
package com.my.io.demo;
import static org.junit.Assert.*;
import org.junit.After;
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
public class CalcTest {
@Before
public void setUp() throws Exception {
System.out.println("setUp");
}
@After
public void tearDown() throws Exception {
System.out.println("tearDown");
}
@Test
public void testDivide1() {
System.out.println("testDivide1");
Calculator cal=new Calculator();
int result=cal.divide(10, 1);
assertEquals(10,result);
}
@Test
public void testDivide2() {
System.out.println("testDivide2");
Calculator cal=new Calculator();
int result=cal.divide(10, 0);
assertEquals(0,result);
}
@Test
public void testDivide3() {
System.out.println("testDivide3");
Calculator cal=new Calculator();
int result=cal.divide(10, 2);
assertEquals(3,result);
}
@Test
public void testDivide4() {
assertTrue(true);
assertEquals(true,true);
}
@Test
public void testDivide5() {
assertNull(null);
assertEquals(null,null);
}
@BeforeClass
public static void setUpBeforeClass() throws Exception {
System.out.println("setUpBeforeClass");
}
@AfterClass
public static void tearDownAfterClass() throws Exception {
System.out.println("tearDownAfterClass");
}
}
package com.my.io.demo;
import static org.junit.Assert.*;
import org.junit.After;
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
public class CalcTest2 {
@Before
public void setUp() throws Exception {
System.out.println("setUp");
}
@After
public void tearDown() throws Exception {
System.out.println("tearDown");
}
@Test
public void testDivide1() {
System.out.println("testDivide1");
Calculator cal=new Calculator();
int result=cal.divide(10, 1);
assertEquals(10,result);
}
@Test
public void testDivide2() {
System.out.println("testDivide2");
Calculator cal=new Calculator();
int result=cal.divide(10, 0);
assertEquals(0,result);
}
@Test
public void testDivide3() {
System.out.println("testDivide3");
Calculator cal=new Calculator();
int result=cal.divide(10, 2);
assertEquals(3,result);
}
@Test
public void testDivide4() {
assertTrue(true);
assertEquals(true,true);
}
@Test
public void testDivide5() {
assertNull(null);
assertEquals(null,null);
}
@BeforeClass
public static void setUpBeforeClass() throws Exception {
System.out.println("setUpBeforeClass");
}
@AfterClass
public static void tearDownAfterClass() throws Exception {
System.out.println("tearDownAfterClass");
}
}
运行AllTests结果如下:
参数化处理:
package com.my.junit4;
import static org.junit.Assert.assertEquals;
import java.util.Arrays;
import java.util.Collection;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
import org.junit.runners.Parameterized.Parameters;
@RunWith(Parameterized.class)
public class ParaTest {
private int input1;
private int input2;
private int expected;
@Parameters
public static Collection<Object[]> prepareData(){
Object [][] object = {{3,1,3},{25,5,5},{36,6,6},{0,4,7}};
return Arrays.asList(object);
}
public ParaTest(int input1,int input2,int expected){
this.input1 = input1;
this.input2 = input2;
this.expected = expected;
}
@Test
public void testDiv(){
Calculator calc = new Calculator();
int result = calc.divide(input1,input2);//input1,input2,expected分别对应二维数组元素的第一个,第二个和第三个元素
assertEquals(expected,result);
}
}
运行结果: