2017-09-15 90 views
-4

我當前正在嘗試模擬DateTime對象,以便可以攔截它並使其每次在測試中創建一個新的DateTime對象時創建一個常量(預定的)DateTime對象。眼下如何使用Mockito模擬Jodatime DateTime

DateTime start = new LocalDateTime().toDateTime().minusHours(1)

DateTime end = new LocalDateTime().toDateTime()

,我嘲諷LocalDateTime對象和DateTime對象,但我不知道如何:

在我實際的方法,我創建DateTime對象這樣繼續:

@Mock 
DateTime dt; 

@Mock 
LocalDateTime ldt; 

@Test 
public void test() { 
    when(new DateTime()).thenReturn(????); // Stuck here. 
    when(new LocalDateTime().toDateTime()).thenReturn(dt); 
} 

任何幫助,將不勝感激。謝謝!

回答

0

你不能用Mockito模擬靜態方法調用(或構造函數調用)你可以用Powermock,但是這可能是錯誤的方法。

您可能想要考慮使用DateTimeUtils.setCurrentMillis* methods來控制Jodatime當前時間的概念。例如,你可以使時間固定。這樣做的缺點是它正在改變全局狀態,因此可能會有意想不到的效果;您還需要確保在測試後重置當前millis提供商。

然而,一個更好的解決方案是使用依賴注入,所以你注入東西進級下測試,它允許你創建的DateTime,例如實例一個Supplier<DateTime>,所以你調用非靜態的supplier.get()而不是new DateTime()