MyService
類的方法返回java.util.Date
對象和MyManager
類正在調用MyService
類的方法。我正在編寫MyManager
類的測試用例。
當我嘲笑使用Mockito模擬日期對象
Mockito.when(manager.getDate())).thenReturn((Date)Mockito.any())
不工作。有人可以幫我解決這個問題嗎?
MyService
類的方法返回java.util.Date
對象和MyManager
類正在調用MyService
類的方法。我正在編寫MyManager
類的測試用例。
當我嘲笑使用Mockito模擬日期對象
Mockito.when(manager.getDate())).thenReturn((Date)Mockito.any())
不工作。有人可以幫我解決這個問題嗎?
我不認爲你正在使用正確的語法。 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
那麼你的代碼可能看起來像測試Manager
Manager
類。
謝謝@sprinter – user1920
any
是匹配的Mockito,通常用來匹配調用的函數的參數,而不是返回值。在大多數情況下,返回值是具體的對象和類型是已知的,因此在thenReturn()
中使用any()
沒有任何意義。
的Mockito嘲諷可以這樣,如果你正在測試MyManager
類對MyService
類的依賴,如果一些的MyService
方法旨在被嘲笑,你首先需要創建一個嘲笑適用於只是嘲笑對象的方法對象爲'MyService'類,然後使用when
子句來模擬該方法。 MyManager
不會被嘲笑。
像any()
這樣的匹配器在點#2處出現,以匹配函數參數類型。在你的情況下,它的一個沒有參數函數,所以沒有匹配器需要。
如果您希望返回虛擬值,則通過thenReturn()
子句返回該值。您可以返回null
值或非空值。很明顯,你必須創建一個對象,如果打算回非 - 空值(在你的情況,這可能是一個具體的Date
對象)
所以,你的代碼應該是什麼樣子,
Mockito.when(service.getDate())).thenReturn(date);
OR Mockito.when(service.getDate())).thenReturn(null);
其中service
是MyService
類型和date
的嘲笑對象是預創建的Date
類型對象。
我們模擬依賴關係,而不是測試中的主題。
我正在使用java4和junit3 – user1920
你是什麼意思不工作?編譯錯誤,測試用例失敗? – sidgate