我只是碰巧实现了一个void followlink(obj page,obj link)
简单地将页面和链接添加到队列的方法。我没有成功尝试测试这种方法。
我只想测试队列中是否包含从 followlink 方法接收的页面和链接。我的测试类已经扩展了 TestCase。那么测试这种方法的最佳方法是什么?
我只是碰巧实现了一个void followlink(obj page,obj link)
简单地将页面和链接添加到队列的方法。我没有成功尝试测试这种方法。
我只想测试队列中是否包含从 followlink 方法接收的页面和链接。我的测试类已经扩展了 TestCase。那么测试这种方法的最佳方法是什么?
JUnit FAQ有一节介绍返回的测试方法void
。在您的情况下,您想测试所调用方法的副作用。
FAQ中给出的示例测试了Collection
添加项目后a的大小发生变化。
@Test
public void testCollectionAdd() {
Collection collection = new ArrayList();
assertEquals(0, collection.size());
collection.add("itemA");
assertEquals(1, collection.size());
collection.add("itemB");
assertEquals(2, collection.size());
}
如果在调用您的方法之前和之后的队列,您可以测试大小,例如:
int size = queue.length();
followLink(page, link);
assertEquals(size+1, queue.length()); // or maybe size+2?
您可能会做的另一件事是从一个空队列开始,调用 followLink,然后将第一个项目出列并测试其值。
很可能,您的队列是私有的,因此检查大小不起作用。我见过的“测试设计”解决方案是使用包私有方法和成员。由于您的 junit 测试可能在同一个包中,因此它们可以访问。
这本身就可以让“ queue.length() ”副作用测试工作。
但我会更进一步:真的,您应该考虑检查您的方法是否插入了正确的页面并链接到您的队列。详细信息需要更多关于您如何表示(和组合)页面和链接的知识。
jMock解决方案也非常好,尽管事实上我更熟悉编写自己的测试工具。
使用 jMock 库并模拟保存队列的存储,jMock 允许断言是否调用了模拟方法以及使用什么参数。
所以 - 在方法调用之后检查队列,如果传递给方法的值被添加到队列中。为此,您需要访问队列(类似于 getQueue())。
我们有两种方法可以检查以下内容:
使用以下程序中的队列/集合的大小进行验证:(正如帕特里克所指出的)
@Test
public void testfollowlinkAdd() {
int size = queue.length();
queue.add(pageLink); //Considering an Object of PageLink
Assert.assertTrue(size+1, queue.length());
}
或者