2016-12-30 331 views
0

我看到類似的問題,但沒有正確回答,因爲我正在尋找。Java中的單元測試void方法Junit/Mockito

我有void方法,它根據其他一些DB值對Model對象進行一些更改,然後再次將其保存回數據庫。

僞代碼:

User{ 
List<Mark> marks; 
String fullName; 
int grade; 
date dob; 
} 

的邏輯是通過調用另一個服務應用一些公式來更新用戶級。

這是我用來測試它:

我可以給User物體標記作爲輸入。我將通過提供公式來確定每個商標的等級來嘲笑服務。我想測試最後的User對象與我在保存前預期的內容相匹配。

我知道我可以將其移動到單獨的方法並返回對象,以便可以進行單元測試。我在這裏看到的是如果有任何方法來測試void方法內部的邏輯來驗證更新的對象。我在我們的項目中有幾個類似的方法。

我知道有Mockito.verify或我可以打電話像doNothing等。這只是調用方法,看看裏面發生了什麼。但是我沒有通過調用這些方法來獲得數據驗證。

如果有人能爲此提出解決方案,那可能會很好。

我舉了一個例子,代碼可用於我。儘管這是一個通用的問題。我的問題是在這裏如何測試一個無效的方法?我的問題不是如何嘲諷一種無效的方法。由於void方法不會返回任何內容,但它會執行一些邏輯並最終更新數據庫。我想測試執行的邏輯是否適用於不同的場景。情況不能改變原始方法 - 爲這些方法編寫單元測試。有什麼建議麼?

+2

「_我知道我可以移動它來分離方法並返回對象,以便可以進行單元測試。」< - 這樣做。 – jaco0646

+0

感謝@ jaco0646爲您的快速響應。但是你的意思是沒有辦法在java單元測試中驗證void方法中的數據嗎? – Shamseer

+3

我不是說你不可以。我說你不會。不要在複雜的測試中繞過設計問題。修復設計。 – jaco0646

回答

1

你的方法不返回任何東西的事實是無關緊要的。您可以像其他方法一樣測試void方法:設置您的輸入,調用方法,執行所需的斷言。

如果我理解正確,您遇到的問題是該方法不會返回任何內容,但是如果您傳遞的是初始User對象,則您已經有對該對象的引用,因此您仍然可以執行所需的任何斷言void方法完成後。

+0

Tnx,現在解決了我的問題。我將需要詳細瞭解如何製作更好的單元可測試代碼。您是否有很好的參考資料可以看到設計應用程序的更多亮點,以使更多的單元可測試... – Shamseer