簡體   English   中英

如何使用Junit測試工具測試void方法?

[英]How to test void method with Junit testing tools?

我碰巧實現了一個方法void followlink(obj page,obj link) ,它簡單地添加了頁面和鏈接到隊列。 我試圖測試這種方法是不成功的。

我想要的是測試隊列中包含從followlink方法收到的頁面和鏈接。 我的測試類已經擴展了TestCase。 那么測試這種方法的最佳方法是什么?

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

您可以在調用方法之前和之后測試隊列的大小,例如:

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

您可能要做的另一件事是從空隊列開始,調用followLink,然后將第一個項目出列並測試其值。

最有可能的是,您的隊列是私有的 ,因此檢查大小是行不通的。 我見過的“測試設計”解決方案是使用包私有方法和成員。 由於您的junit測試可能在同一個包中,因此他們可以訪問。

這本身就讓“ queue.length() ”副作用測試工作。

但我會更進一步:實際上,你應該考慮檢查你的方法是否插入了正確的頁面並鏈接到你的隊列。 其詳細信息需要更多關於您如何表示(和組合)頁面和鏈接的知識。

jMock解決方案也非常好,但實際上我更熟悉編寫自己的測試工具。

所以 - 在方法調用隊列之后檢查,如果傳遞給方法的值被添加到隊列中。 您需要訪問隊列(類似於getQueue())。

使用jMock庫並模擬保存隊列的存儲 ,jMock允許斷言是否調用了mocked方法以及使用了什么參數。

我們有兩種方法可以檢查以下內容:

  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這樣的框架在這​​里很有幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM