测试案例分析
在测试驱动开发实践中,第一步就是考虑测试方案,通过分析该类的功能,我们可以得到以下测试案例:
1) 队列为空测试
TC01: 队列新建时,应为空;
TC02: 清空队列后,应为空;
TC03: 当出队列操作次数与插入队列操作次数一样时,应为空;
2) 插入队列测试:
TC04: 插入队列操作后,新数据元素将插入在队列的未尾;
TC05: 插入队列操作后,队列将一定不为空;
3) 出队列测试
TC06: 出队列操作后,第一个数据元素将被从队列中删除;
4) 取队头测试
TC07: 取队头操作将获得队列中的第一个数据元素。
5) 清空队列测试
TC08: 清空队列操作后,队列将为空队列;
注: 此处为了讲解的方便,并未将所有的测试用例都列出,同时也选择了一些十分简单的测试用例。
第一次迭代
我们首先编写第一个测试代码,这一测试代码只考虑了测试案例TC01, 也就是保证新建的队列为空:
import junit.framework.*;
//每个使用JUnit编写的测试代码都应该包括本行
public class testQueue extends TestCase
//创建一个测试用例,继承TestCase
{
protected Queue q1;
public static void main (String[] args)
{
junit.textui.TestRunner.run (suite());
//执行测试用例
}
protected void setUp() //环境变量准备
{
q1= new Queue();
}
public static Test suite() //通用格式,指定测试内容
{
return new TestSuite(testQueue.class);
}
public void testEmpty() //以下每个方法就是一个测试
{
assertTrue(q1.empty());
//当队列新建时,应为空-TC01
}
}
安装JUnit十分简单,只需在www.junit.org中下载最新的软件包(ZIP格式), 然后将其解压缩,并且将"JUnit安装目录\junit.jar" 以及"JUnit安装目录"都加到系统环境变量CLASSPATH中去即可。
执行套件可以像上述程序一样在main方法中使用,也可以直接在命令行调用:java junit.textui.TestRunner 测试类名(文本格式)、java junit.awtui.TestRunner 测试类名(图形格式,AWT版)、java junit.swingui.TestRunner测试类名(图形版,Swing版)。
编译执行(即在命令行执行javac testQueue.java和javatestQueue), 你会发现屏幕上出现提示:
.E 一个小点说明执行了一个测试用例,E表示其失败
Time: 0.11 说明执行测试共花费了0.11秒
There was 1 error: 说明存在一个错误
1) testEmpty(testQueue)java.lang.NoClassDefFoundError: Queue
at testQueue.setUp(testQueue.java:13)
at testQueue.main(testQueue.java:9)
FAILURES!!!
Tests run: 1, Failures: 0, Errors: 1
测试没有通过是肯定的,因为Queue类都还没有写呢?怎么可能通过测试,因此,我们就编写以下代码,以使测试通过:
public class Queue extends java.util.Vector
{
public Queue()
{
super();
}
public boolean empty()
{
return super.isEmpty();
}
}
将这个类编译后,再次执行测试程序,这时将出以下提示:
. 一个小点说明执行了一个测试用例,没有E表示其成功
Time: 0.11
OK (1 test)