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

猜你喜欢

转载自xiaoxuejie.iteye.com/blog/1175774
今日推荐