参考:http://www.cnblogs.com/yangxia-test/p/3996120.html
JUnit4是一个开源的java单元测试框架,我们只需要引入一个包,就可以使用它的功能
先说说他的常见注解
@Before(每个测试方法执行之前都要执行一次,比如有些数据需要重新赋值
@After(每个测试方法执行后都执行一次,比如有些数据需要重新复制
@BeforeClass(所有方法执行前执行
@AfterClass(所有方法执行后执行
@Test(timeout = xxx)看当前测试方法是否在一定时间内完成(比如看是否死循环
@Test(expected=Exception.class)测试方法中是否有抛出了这个异常
@Ignore(历史原因或者没有设置好,就先不测试这个方法,加载@Test上面,不代替@Test
下面说说使用方法
准备一个测试用的类(里面有错误的方法
package andycpp; public class Calculator { private static int result; // 静态变量,用于存储运行结果 public void add(int n) { result = result + n; } public void substract(int n) { result = result - 1; // Bug:正确的应该是result=result-n; } public void multiply(int n) { // 此方法尚未写好 } public void divide(int n) { result = result / n; } public void square(int n) { result = n * n; } public void squareRoot(int n) { for (;;) ; // Bug:死循环 } public void clear() { result = 0; // 将结果清零 } public int getResult() { return result; } }
导入JUnit4包
右键项目——》构建路径——》add Library——》JUnit
在相对应的java文件右键,new——》JUnit Test Case,编写各个方法
private static Calculator calculator = new Calculator(); @Before public void setUp() throws Exception { calculator.clear(); } @After public void tearDown() throws Exception { } @Test(timeout = 1000) public void testAdd() { calculator.add(2); calculator.add(3); } @Test public void testSubstract() { calculator.add(10); calculator.substract(2); assertEquals(8, calculator.getResult()); } @Ignore("Multiply() Not yet implemented") @Test public void testMultiply() { } @Test(expected = ArithmeticException.class) public void testDivide() { calculator.add(8); calculator.divide(0); assertEquals(4, calculator.getResult()); } @Test(timeout = 1000) public void testSquareRoot() { calculator.squareRoot(1); }
右键测试类,run as --》JUnit可以看到效果
下面说带有多个参数一起解决
0,类前面加注解@RunWith(Parameterized.class)
1,设置参数
2,@Parameters方法
3,重写构造方法
4,@Test方法
private static Calculator calculator = new Calculator(); private int param; private int result; @Before public void setUp() throws Exception { } @After public void tearDown() throws Exception { } @Parameters public static Collection data() { return Arrays.asList(new Object[][] { { 2, 4 }, { 0, 0 }, { -3, 9 } }); } public SquareTest(int param, int result) { this.param = param; this.result = result; } @Test public void testSquare() { calculator.square(param); assertEquals(result, calculator.getResult()); System.out.println("result=" + result); }
效果图
我们打包想一起测试的时候,写个类包他们两个整合起来
代码内容
@RunWith(Suite.class)
@Suite.SuiteClasses({ CalculatorTest.class, SquareTest.class })
public class All {
}