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