我只是碰巧实现了一个方法void followlink(obj page,obj link)
,它只是将页面和链接添加到队列中。我没有试图测试这种方法。如何使用Junit测试工具测试void方法?
我想要的只是测试在队列中包含从followlink方法收到的页面和链接。我的测试类已经扩展了TestCase。那么测试这种方法的最好方法是什么?
我只是碰巧实现了一个方法void followlink(obj page,obj link)
,它只是将页面和链接添加到队列中。我没有试图测试这种方法。如何使用Junit测试工具测试void方法?
我想要的只是测试在队列中包含从followlink方法收到的页面和链接。我的测试类已经扩展了TestCase。那么测试这种方法的最好方法是什么?
您可以测试规模,如果前面召唤你的方法后的队列,像:
int size = queue.length();
followLink(page, link);
assertEquals(size+1, queue.length()); // or maybe size+2?
你可能会做的另一件事是空队列开始,打电话followLink,然后出队的第一项并测试其值。
所以 - 如果传递给方法的值被添加到队列中,则在方法调用队列后检查。您需要访问队列(类似于getQueue())。
该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());
}
使用jMock库和嘲笑一个存储保存您的队列,JMock的允许断言模拟的方法是否被调用,并用什么参数。
最有可能的是,你的队列是私人,所以检查大小是行不通的。我所看到的“用于测试的设计”解决方案是利用包私有方法和成员。由于你的junit测试可能在同一个软件包中,他们将有权访问。
那自己让“queue.length()”副作用测试工作。
但我会更进一步:真的,你应该考虑检查你的方法是否已经插入正确的页面并链接到你的队列。这些细节需要更多关于如何代表(和组合)页面和链接的知识。
jMock解决方案也非常好,但事实上我更熟悉编写我自己的测试工具。
我们有两种方法可以检查以下内容:
验证使用的队列/集合的大小如下面的程序: (正如帕特里克指出)
@Test
public void testfollowlinkAdd() {
int size = queue.length();
queue.add(pageLink); //Considering an Object of PageLink
Assert.assertTrue(size+1, queue.length());
}
OR
什么是被测试的类? – 2009-08-07 12:53:16
是否可以重构该方法以返回除void之外的其他内容?这不像任何现有的代码会被打扰,因为没有调用该方法的结果。 ;) – 2009-08-07 13:02:50