问题
I just happen to implement a method void followlink(obj page,obj link)
which simply adds page and link to queue. I have unsuccessfully tried to test this kind of method.
All I want is to test that in the queue contains page and link received from followlink method. My test class already extends TestCase. So what is the best way to test such a method?
回答1:
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());
}
回答2:
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.
回答3:
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.
回答4:
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.
回答5:
Use jMock library and mock a storage that holds your queue, jMock allows to assert whether mocked method was called and with what parameters.
回答6:
We have two ways to check the following :
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
- Make use of MockObjects. Frameworks like Mockito can be helpful here.
来源:https://stackoverflow.com/questions/1244541/how-to-test-void-method-with-junit-testing-tools