我只是碰巧实现的方法void followlink(obj page,obj link)
它只是增加了网页,并链接到队列中。 我曾经失败试图测试这种方法。
所有我想要的是测试在队列包含页面和followlink方法收到的链接。 我的测试类已经扩展的TestCase。 那么,什么是测试这种方法的最佳方法是什么?
我只是碰巧实现的方法void followlink(obj page,obj link)
它只是增加了网页,并链接到队列中。 我曾经失败试图测试这种方法。
所有我想要的是测试在队列包含页面和followlink方法收到的链接。 我的测试类已经扩展的TestCase。 那么,什么是测试这种方法的最佳方法是什么?
该JUnit FAQ中对测试方法返回一个部分void
。 在你的情况,你想测试一个副作用调用方法。
在一个大小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());
}
你可以测试大小,如果队列之前,并调用你的方法后,是这样的:
int size = queue.length();
followLink(page, link);
assertEquals(size+1, queue.length()); // or maybe size+2?
你可能会做的另一件事是空队列开始,打电话followLink,然后出队的第一个项目并测试其值。
最有可能的,你的队列为私人的 ,所以检查的大小不会去上班。 在“可测性设计”解决方案,我所看到的是尽量使用包的私有方法和成员来代替。 由于您的JUnit测试很可能是在同一个包,他们将有机会获得。
这本身让“queue.length()”副作用测试工作。
但我会走的更远:真的,你应该考虑检查你的方法插入正确的页面和链接到您的队列。 对于细节需要你是如何代表(并结合)页面和链接更多的知识。
JMock的解决方案也很不错,虽然事实上我更熟悉,写我自己的测试工具。
所以 - 检查方法的调用队列后,如果传递给方法的值被添加到队列。 您需要访问队列(像getQueue())这一点。
使用jMock库和模型保存您的队列中的存储 ,JMock的允许断言模拟的方法是否被调用,并用什么参数。
我们有两种方法可以检查以下内容:
验证使用队列/集合的大小如以下方案:(正如由Patrick指出的)
@Test public void testfollowlinkAdd() { int size = queue.length(); queue.add(pageLink); //Considering an Object of PageLink Assert.assertTrue(size+1, queue.length()); }
要么