如何使用Junit测试工具测试void方法?

时间:2009-08-07 12:50:53

标签: java unit-testing junit void

我碰巧实现了一个方法void followlink(obj page,obj link),只需添加页面和链接到队列。我试图测试这种方法是不成功的。

我想要的只是测试队列中包含从followlink方法接收的页面和链接。我的测试类已经扩展了TestCase。那么测试这种方法的最佳方法是什么?

6 个答案:

答案 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)

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

  1. 使用以下程序中的队列/集合大小进行验证: (正如帕特里克所指出的那样)

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

    1. 使用MockObjects。像Mockito这样的框架可以在这里提供帮助。