2015-12-29 106 views
0

MyService類的方法返回java.util.Date對象和MyManager類正在調用MyService類的方法。我正在編寫MyManager類的測試用例。
當我嘲笑使用Mockito模擬日期對象

Mockito.when(manager.getDate())).thenReturn((Date)Mockito.any()) 

不工作。有人可以幫我解決這個問題嗎?

+0

我正在使用java4和junit3 – user1920

+0

你是什麼意思不工作?編譯錯誤,測試用例失敗? – sidgate

回答

3

我不認爲你正在使用正確的語法。 any成語用於在調用方法時匹配參數,而不用於指定被調用的模擬的返回值。有關這些工作方式的詳細信息,請參見Matchers

嘗試提供一個真實的日期作爲您的返回值。

我從您的代碼行收集可能會錯誤地使用Mockito。

Date testDate = new Date("01/01/1970"); 
Service mockedService = mock(Service.class); 
when(service.getDate()).thenReturn(testDate); 
testManager.setService(service); 
assertEquals(testDate, testManager.getServicesDate()); 

換句話說,你通常不會被嘲笑一個Manager對象(您的代碼所暗示的),如果你的測試:如果您使用的是嘲笑Service那麼你的代碼可能看起來像測試ManagerManager類。

+0

謝謝@sprinter – user1920

1
  1. any是匹配的Mockito,通常用來匹配調用的函數的參數,而不是返回值。在大多數情況下,返回值是具體的對象和類型是已知的,因此在thenReturn()中使用any()沒有任何意義。

  2. 的Mockito嘲諷可以這樣,如果你正在測試MyManager類對MyService類的依賴,如果一些的MyService方法旨在被嘲笑,你首先需要創建一個嘲笑適用於只是嘲笑對象的方法對象爲'MyService'類,然後使用when子句來模擬該方法。 MyManager不會被嘲笑。

  3. any()這樣的匹配器在點#2處出現,以匹配函數參數類型。在你的情況下,它的一個沒有參數函數,所以沒有匹配器需要。

  4. 如果您希望返回虛擬值,則通過thenReturn()子句返回該值。您可以返回null值或非空值。很明顯,你必須創建一個對象,如果打算回非 - 空值(在你的情況,這可能是一個具體的Date對象)

所以,你的代碼應該是什麼樣子,

Mockito.when(service.getDate())).thenReturn(date); 

OR Mockito.when(service.getDate())).thenReturn(null);

其中serviceMyService類型和date的嘲笑對象是預創建的Date類型對象。

我們模擬依賴關係,而不是測試中的主題。