30

我只是碰巧实现了一个void followlink(obj page,obj link)简单地将页面和链接添加到队列的方法。我没有成功尝试测试这种方法。

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

4

6 回答 6

43

JUnit FAQ有一节介绍返回的测试方法void。在您的情况下,您想测试所调用方法的副作用

FAQ中给出的示例测试了Collection添加项目后a的大小发生变化。

@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());
}
于 2009-08-07T13:03:54.710 回答
15

如果在调用您的方法之前和之后的队列,您可以测试大小,例如:

int size = queue.length();
followLink(page, link);
assertEquals(size+1, queue.length()); // or maybe size+2?

您可能会做的另一件事是从一个空队列开始,调用 followLink,然后将第一个项目出列并测试其值。

于 2009-08-07T12:56:59.420 回答
3

很可能,您的队列是私有的,因此检查大小不起作用。我见过的“测试设计”解决方案是使用包私有方法和成员。由于您的 junit 测试可能在同一个包中,因此它们可以访问。

这本身就可以让“ queue.length() ”副作用测试工作。

但我会更进一步:真的,您应该考虑检查您的方法是否插入了正确的页面并链接到您的队列。详细信息需要更多关于您如何表示(和组合)页面和链接的知识。

jMock解决方案也非常好,尽管事实上我更熟悉编写自己的测试工具。

于 2009-08-07T17:50:41.093 回答
0

使用 jMock 库并模拟保存队列的存储,jMock 允许断言是否调用了模拟方法以及使用什么参数。

于 2009-08-07T14:56:41.010 回答
0

所以 - 在方法调用之后检查队列,如果传递给方法的值被添加到队列中。为此,您需要访问队列(类似于 getQueue())。

于 2009-08-07T12:58:38.687 回答
0

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

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

    @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 这样的框架在这​​里会很有帮助。
于 2016-06-15T18:03:31.550 回答