How to test void method with Junit testing tools?

◇◆丶佛笑我妖孽 提交于 2019-11-26 13:48:25

The JUnit FAQ has a section on testing methods that return void. In your case, you want to test a side effect of the method called.

The example given in the FAQ tests that the size of a Collection changes after an item is added.

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

You could test the size if the queue before and after calling your method, something like:

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

another thing you might do is start off with an empty queue, call followLink, then dequeue the first item and test its values.

Most likely, your queue is private, so checking the size isn't going to work. The "design for testing" solution I've seen is to make use of package private methods and members instead. Since your junit tests are likely to be in the same package, they'll have access.

That by itself lets the "queue.length()" side effect test work.

But I'd go further: really, you should consider checking that your method has inserted the correct page and link to your queue. The details for that require more knowledge about how you're representing (and combining) page and link.

The jMock solution is also very good, though in truth I'm much more familiar with writing my own test harnesses.

So - check after the call of the method the queue, if the values passed to the method are added to the queue. You need access to the queue (something like getQueue()) for this.

Use jMock library and mock a storage that holds your queue, jMock allows to assert whether mocked method was called and with what parameters.

subodhkarwa

We have two ways to check the following :

  1. Verify using the size of the Queue/Collection as in the program below : (As pointed out by Patrick)

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

OR

  1. Make use of MockObjects. Frameworks like Mockito can be helpful here.
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!