如何使用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允许断言模拟方法是否被调用,并与什么参数。

我们有两种方法来检查以下内容:

  1. 按照以下程序validation队列/集合的大小:(正如Patrick指出的那样)

     @Test public void testfollowlinkAdd() { int size = queue.length(); queue.add(pageLink); //Considering an Object of PageLink Assert.assertTrue(size+1, queue.length()); } 

要么

  1. 利用MockObjects。 像Mockito框架可以在这里有所帮助。