JUnit测试骨架
使用JUnit时,主要都是通过继承TestCase类别来撰写测试用例,使用testXXX()名称来撰写单元测试。
用JUnit写测试真正所需要的就三件事:
1. 一个import语句引入所有junit.framework.*下的类。
2. 一个extends语句让你的类从TestCase继承。
3. 一个调用super(string)的构造函数。
下面针对求最大值函数编写测试用例:
1.简单测试:[7,8,9]->9;
2.位序测试:[9,8,7] ->9;[7,9,8] ->9;[8,7,9] ->9;
3.重复值测试:[9,7,9,8] ->9;
4.单值测试:[1]->1;
5.负值测试:[-7,-8,-9]->-7;
6.空值测试:[]->抛出异常;
测试类NumberToolTest:
public class NumberToolTest extends TestCase {
public NumberToolTest(String name) {
super(name);
}
public void testSimple() {
assertEquals(9, NumberTool.getMax(new int[] { 7, 8, 9 }));
}
public void testOrder() {
assertEquals(9, NumberTool.getMax(new int[] { 9, 8, 7 }));
assertEquals(9, NumberTool.getMax(new int[] { 7, 9, 8 }));
assertEquals(9, NumberTool.getMax(new int[] { 8, 7, 9 }));
}
public void testDups() {
assertEquals(9, NumberTool.getMax(new int[] { 9, 7, 9, 8 }));
}
public void testOne() {
assertEquals(1, NumberTool.getMax(new int[] { 1 }));
}
public void testNegitave() {
assertEquals(-7, NumberTool.getMax(new int[] { -7, -8, -9 }));
}
public void testEmpty() {
try {
NumberTool.getMax(new int[] {});
fail("Should have thrown an exception");
} catch (RuntimeException e) {
assertTrue(true);
}
}
}
Case 1:如果你只想执行某TestCase中的部分测试函数,则可自己构建TestSuite
做法:
下面的代码针对NumberToolTest中的两个测试函数testSimple()和testNegitave()进行测试。
import com.zj.c01.NumberToolTest;
import junit.framework.Test;
import junit.framework.TestSuite;
public class PartTest {
public static Test suite() {
TestSuite suite = new TestSuite();
suite.addTest(new NumberToolTest("testSimple"));
suite.addTest(new NumberToolTest("testNegitave"));
return suite;
}
}
Case 2:组合多个testCase一起来测试
public class NumberToolTest2 extends TestCase {
private int[] arr;
public NumberToolTest2(String name) {
super(name);
}
protected void setUp() throws Exception {
super.setUp();
arr = new int[] { -5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5 };
}
protected void tearDown() throws Exception {
super.tearDown();
arr = null;
}
public void testMax() {
assertEquals(5, NumberTool.getMax(arr));
}
public void testMin() {
assertEquals(-5, NumberTool.getMin(arr));
}
}
做法:
下面会将NumberToolTest2和NumberToolTest一起来进行测试
public class CompositeTest {
public static Test suite() {
TestSuite suite = new TestSuite("Running all tests.");
suite.addTestSuite(MathToolTest.class);
suite.addTestSuite(NumberToolTest.class);
return suite;
}
}
注意:
每一个定义好的TestCase,都使用TestRunner 来运行测试,事实上TestRunner并不直接运行TestCase上的单元方法,而是通过TestSuite ,TestSuite可以将数个TestCase组合在一起。
在上面的例子中,并没有看到任何的TestSuite,这是因为TestRunner的run()方法中会建立TestSuite:
static public void run(Class testClass) {
run(new TestSuite(testClass));
}