public void testLookupAndInsert() {
VectorAdapter v = new VectorAdapter();
v.insert("this");
v.insert("is");
v.insert("a");
v.insert("test");
assertEquals("Retrieved and inserted elements don't match",
"a",
v.lookup(2));
}
}
然后我们可以实现我们的适配器以通过这个测试,如下所示:
清单 2. 类 VectorAdapter
import java.util.Vector;public class VectorAdapter implements Sequence {
private Vector values = new Vector();
private int length = 0;
public void insert(Object o) {
length += 1;
values.addElement(o);
}
public Object lookup(int i) {
return values.elementAt(i);
}
}
interface Sequence {
public void insert(Object o);
public Object lookup(int i);
}
当 Daikon 在这段代码上运行时,它可能推断:对于方法lookup,i总是小于length。Daikon 可能从单元测试中推断出这一点,并向我们的方法报告一条前置条件:i < length。
然后程序员可以检查 Daikon 报告的不变量,从而更好地了解其测试覆盖程序的范围到底怎么样。例如,如果 Daikon 开始推断出大量不想要的不变量,这意味着单元测试只是用不具代表性的可能的程序输入的子集检测了程序。
尽管 Daikon 是用 Java 语言编写的,但它需要用 C++ 编写的前端,这削弱了它原有的可移植性。尽管如此,还是可以在线获得针对许多主要平台的前端构建。此外,Daikon 团队也打算添加其它平台所需要的构建。
(您可以在参考资料一节找到关于 Daikon 的下载信息和更多内容。)
可以检查单元测试覆盖范围的分析工具
分析工具可以帮助程序员构建健壮的单元测试套件。迄今为止,完成这一工作主要有两种方法:
目前有几种试图自动从代码产生单元测试的免费工具,但大多数担任这项任务的免费工具还处于起步阶段。其中一些比较有希望的是 JUnitDoclet 和 JUB(“JUnit test case Builder”的缩写),可在 SourceForge 上得到它们(参考资料一节提供了它们的链接)。
文章来源于领测软件测试网 https://www.ltesting.net/