如何使用Junit测试工具测试void方法?

发布于 2024-07-29 23:39:27 字数 198 浏览 6 评论 0原文

我只是碰巧实现了一个方法 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(6

伪心 2024-08-05 23:39:28

最有可能的是,您的队列是私有,因此检查大小不起作用。 我见过的“测试设计”解决方案是使用包私有方法和成员。 由于您的 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.

江湖彼岸 2024-08-05 23:39:28

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

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

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

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.

云淡月浅 2024-08-05 23:39:28

因此 - 在调用该方法后检查队列,是否将传递给该方法的值添加到队列中。 为此,您需要访问队列(类似于 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.

〆凄凉。 2024-08-05 23:39:28

使用 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.

呆° 2024-08-05 23:39:28

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

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

    <前><代码>@测试
    公共无效测试followlinkAdd(){
    int 大小 = 队列.length();
    队列.add(pageLink); //考虑PageLink对象
    Assert.assertTrue(size+1,queue.length());
    }

或者

  1. 使用 MockObjects。 像 Mockito 这样的框架在这​​里会很有帮助。

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.
余厌 2024-08-05 23:39:27

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

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());
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文