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 {
publicNumberToolTest(Stringname){
super(name);
}
publicvoidtestSimple(){
assertEquals(9,NumberTool.getMax(newint[]{7,8,9}));
}
publicvoidtestOrder(){
assertEquals(9,NumberTool.getMax(newint[]{9,8,7}));
assertEquals(9,NumberTool.getMax(newint[]{7,9,8}));
assertEquals(9,NumberTool.getMax(newint[]{8,7,9}));
}
publicvoidtestDups(){
assertEquals(9,NumberTool.getMax(newint[]{9,7,9,8}));
}
publicvoidtestOne(){
assertEquals(1,NumberTool.getMax(newint[]{1}));
}
publicvoidtestNegitave(){
assertEquals(-7,NumberTool.getMax(newint[]{-7,-8,-9}));
}
publicvoidtestEmpty(){
try{
NumberTool.getMax(newint[]{});
fail("Shouldhavethrownanexception");
}catch(RuntimeExceptione){
assertTrue(true);
}
}
}Case 1:如果你只想执行某TestCase中的部分测试函数,则可自己构建TestSuite
做法:
下面的代码针对NumberToolTest中的两个测试函数testSimple()和testNegitave()进行测试。
import com.zj.c01.NumberToolTest;
importjunit.framework.Test;
importjunit.framework.TestSuite;
publicclassPartTest{
publicstaticTestsuite(){
TestSuitesuite=newTestSuite();
suite.addTest(newNumberToolTest("testSimple"));
suite.addTest(newNumberToolTest("testNegitave"));
returnsuite;
}
}Case 2:组合多个testCase一起来测试
public class NumberToolTest2 extends TestCase {
privateint[]arr;
publicNumberToolTest2(Stringname){
super(name);
}
protectedvoidsetUp()throwsException{
super.setUp();
arr=newint[]{-5,-4,-3,-2,-1,0,1,2,3,4,5};
}
protectedvoidtearDown()throwsException{
super.tearDown();
arr=null;
}
publicvoidtestMax(){
assertEquals(5,NumberTool.getMax(arr));
}
publicvoidtestMin(){
assertEquals(-5,NumberTool.getMin(arr));
}
}做法:
下面会将NumberToolTest2和NumberToolTest一起来进行测试
public class CompositeTest {
publicstaticTestsuite(){
TestSuitesuite=newTestSuite("Runningalltests.");
suite.addTestSuite(MathToolTest.class);
suite.addTestSuite(NumberToolTest.class);
returnsuite;
}
}注意:
每一个定义好的TestCase,都使用TestRunner来运行测试,事实上TestRunner并不直接运行TestCase上的单元方法,而是通过TestSuite ,TestSuite可以将数个TestCase组合在一起。
在上面的例子中,并没有看到任何的TestSuite,这是因为TestRunner的run()方法中会建立TestSuite:
staticpublicvoidrun(ClasstestClass){
run(newTestSuite(testClass));
}