Junit提供 单元测试,多组参数的单元测试,打包单元测试。
比如你写了一个Calculator类:
package test_junit; 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; } }
写完了想测试下:
选择想测试的类右键new,junit,选择想测试的方法
生成一个test类,把这个测试类补充完整:
package test_junit; import static org.junit.Assert.*; import org.junit.After; import org.junit.AfterClass; import org.junit.Before; import org.junit.Ignore; import org.junit.Test; public class CalculatorTest { private static Calculator calculator = new Calculator(); @AfterClass public static void tearDownAfterClass() throws Exception { } @Before public void setUp() throws Exception { } @After public void tearDown() throws Exception { } @Test public void testAdd() { calculator.add(2); calculator.add(3); assertEquals(5, calculator.getResult()); // fail("Not yet implemented"); } @Ignore public void testSubstract() { calculator.clear(); calculator.add(10); calculator.substract(2); assertEquals(8, calculator.getResult()); } @Test public void testMultiply() { // fail("Not yet implemented"); } @Test public void testDivide() { calculator.clear(); calculator.add(8); calculator.divide(2); assertEquals(4, calculator.getResult()); } @Test(timeout = 12) public void testSquareRoot() { calculator.squareRoot(8); // assertEquals(4,calculator.getResult()); } //@Test(expected = ArithmeticException.class) @Test public void divideByZero() { calculator.divide(0); } }
运行下这个类,就可以看到可视化对错的效果。
如果这个类的某个方法有多组测试数据,那么可以这么写。
package test_junit; import static org.junit.Assert.*; import org.junit.After; import org.junit.AfterClass; import org.junit.Before; import org.junit.Test; import static org.junit.Assert.assertEquals; import org.junit.Test; import org.junit.runner.RunWith; import org.junit.runners.Parameterized; import org.junit.runners.Parameterized.Parameters; import java.util.Arrays; import java.util.Collection; @RunWith(Parameterized.class) public class CalculatorTest2 { private static Calculator calculator = new Calculator(); private int param; private int result; @Parameters public static Collection data() { return Arrays.asList(new Object[][] { { 2, 4 }, { 0, 0 }, { -3, 9 }, }); } // 构造函数,对变量进行初始化 public CalculatorTest2(int param, int result) { this.param = param; this.result = result; } @Test public void square() { calculator.square(param); assertEquals(result, calculator.getResult()); } }
这时,你可能已经写了十来个测试类了,但是一个一个是比较麻烦的,这时多重选择想要的那几个测试类,右键new ->junit -> Junit Test Suits就可以打包了。
package test_junit; import org.junit.runner.RunWith; import org.junit.runners.Suite; import org.junit.runners.Suite.SuiteClasses; @RunWith(Suite.class) @SuiteClasses({ CalculatorTest.class, CalculatorTest2.class }) public class AllTests { }
直接运行这个类就可以一起测试了。
参考:http://blog.csdn.net/andycpp/article/details/1329218