如何测试使用JUnit测试工具无效的方法?(How to test void method with

2019-06-18 04:16发布

我只是碰巧实现的方法void followlink(obj page,obj link)它只是增加了网页,并链接到队列中。 我曾经失败试图测试这种方法。

所有我想要的是测试在队列包含页面和followlink方法收到的链接。 我的测试类已经扩展的TestCase。 那么,什么是测试这种方法的最佳方法是什么?

Answer 1:

该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());
}


Answer 2:

你可以测试大小,如果队列之前,并调用你的方法后,是这样的:

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

你可能会做的另一件事是空队列开始,打电话followLink,然后出队的第一个项目并测试其值。



Answer 3:

最有可能的,你的队列为私人的 ,所以检查的大小不会去上班。 在“可测性设计”解决方案,我所看到的是尽量使用包的私有方法和成员来代替。 由于您的JUnit测试很可能是在同一个包,他们将有机会获得。

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

但我会走的更远:真的,你应该考虑检查你的方法插入正确的页面和链接到您的队列。 对于细节需要你是如何代表(并结合)页面和链接更多的知识。

JMock的解决方案也很不错,虽然事实上我更熟悉,写我自己的测试工具。



Answer 4:

所以 - 检查方法的调用队列后,如果传递给方法的值被添加到队列。 您需要访问队列(像getQueue())这一点。



Answer 5:

使用jMock库和模型保存您的队列中的存储 ,JMock的允许断言模拟的方法是否被调用,并用什么参数。



Answer 6:

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

  1. 验证使用队列/集合的大小如以下方案:(正如由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可以帮助这里。


文章来源: How to test void method with Junit testing tools?