如何使用Junittesting工具testingvoid方法?
我只是碰巧实现一个方法void followlink(obj page,obj link)
,它只是添加页面和链接到队列。 我没有试图testing这种方法。
我只想testing在队列中包含从followlink方法收到的页面和链接。 我的testing类已经扩展了TestCase。 那么testing这种方法的最好方法是什么?
JUnit常见问题有一个testing方法部分返回void
。 在你的情况下,你想testing所谓的方法的副作用 。
常见问题解答中给出的示例testing了在添加项目后, 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()); }
你可以在调用你的方法之前和之后testing队列的大小,如下所示:
int size = queue.length(); followLink(page, link); assertEquals(size+1, queue.length()); // or maybe size+2?
你可能做的另一件事是从一个空的队列开始,调用followLink,然后出列第一个项目并testing它的值。
最有可能的是,你的队列是私人的 ,所以检查大小是行不通的。 我所看到的“testingdevise”解决scheme是使用包私有方法和成员。 由于你的junittesting可能在同一个软件包中,所以他们可以访问。
这本身让“ queue.length() ”副作用testing工作。
但是我会走得更远:实际上,您应该考虑检查您的方法是否插入了正确的页面并链接到您的队列。 这些细节需要更多关于如何代表(和组合)页面和链接的知识。
jMock解决scheme也非常好,但实际上我更熟悉编写我自己的testing工具。
因此,如果传递给方法的值被添加到队列中,请检查方法调用之后的队列。 你需要访问队列(类似于getQueue())。
使用jMock库和模拟存储你的队列的存储 ,jMock允许断言模拟方法是否被调用,并与什么参数。
我们有两种方法来检查以下内容:
-
按照以下程序validation队列/集合的大小:(正如Patrick指出的那样)
@Test public void testfollowlinkAdd() { int size = queue.length(); queue.add(pageLink); //Considering an Object of PageLink Assert.assertTrue(size+1, queue.length()); }
要么
- 利用MockObjects。 像Mockito框架可以在这里有所帮助。