读书人

JUnit测试骨头架子

发布时间: 2012-08-25 10:06:20 作者: rapoo

JUnit测试骨架

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));
}

?

读书人网 >软件架构设计

热点推荐