如何使用Junit测试工具测试void方法?
我只是碰巧实现了一个方法 void followlink(obj page,obj link)
,它只是将页面和链接添加到队列中。 我曾尝试测试这种方法,但没有成功。
我想要的只是测试队列中是否包含从 followlink 方法接收的页面和链接。 我的测试类已经扩展了 TestCase。 那么测试这种方法的最佳方法是什么?
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?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(6)
最有可能的是,您的队列是私有,因此检查大小不起作用。 我见过的“测试设计”解决方案是使用包私有方法和成员。 由于您的 junit 测试可能位于同一个包中,因此它们可以访问。
这本身就可以让“queue.length()”副作用测试发挥作用。
但我想更进一步:实际上,您应该考虑检查您的方法是否已插入正确页面并链接到您的队列。 有关详细信息,需要更多有关如何表示(和组合)页面和链接的知识。
jMock 解决方案也非常好,尽管事实上我更熟悉编写自己的测试工具。
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.
您可以测试调用方法之前和之后队列的大小,例如:
您可能做的另一件事是从空队列开始,调用 followLink,然后将第一个项目出队并测试其值。
You could test the size if the queue before and after calling your method, something like:
another thing you might do is start off with an empty queue, call followLink, then dequeue the first item and test its values.
因此 - 在调用该方法后检查队列,是否将传递给该方法的值添加到队列中。 为此,您需要访问队列(类似于 getQueue())。
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.
使用 jMock 库并模拟一个保存队列的存储,jMock 允许断言是否调用了模拟方法以及使用什么参数。
Use jMock library and mock a storage that holds your queue, jMock allows to assert whether mocked method was called and with what parameters.
我们有两种方法来检查以下内容:
使用队列/集合的大小进行验证,如下面的程序所示:
(正如帕特里克所指出的)
<前><代码>@测试
公共无效测试followlinkAdd(){
int 大小 = 队列.length();
队列.add(pageLink); //考虑PageLink对象
Assert.assertTrue(size+1,queue.length());
}
或者
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)
OR
JUnit FAQ 有一个关于返回
void 的测试方法的部分
。 在您的情况下,您想要测试所调用方法的副作用。FAQ 中给出的示例测试添加项目后
Collection
的大小发生变化。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.