2017-04-07 36 views
0

如何在同一個對象中使用兩次不同的內部狀態(參數)來模擬在測試方法中被調用的Dao。如何兩次模擬一個道,但被同一個對象調用?

User user = new User(); 
user.setActivity(false); 
int prevActivity = accessDao.calculateWork(user); 
user.setActivity(true); 
int predActivity = accessDao.calculateWork(user); 


if(prevActivity==0) { 
    //someAction 
} 

... 

if(predActivity<15) { 
    //someOtherAction. 
} 

我無法更改代碼。在以下情況下,Mockito有什麼辦法嗎?

回答

1

您可以使用Mockito的答案。

AtomicInteger counter = new AtomicInteger(); 
when(accessDao.calculateWork(user)).thenAnswer(new Answer() { 
    Object answer(InvocationOnMock invocation) { 
    if (counter.getAndIncrement() == 0) return someValue; 
    return anotherValue; 
    } 
}); 
1

這是您可能要查找的內容?

accessDao = mock(AccessDao.class); 
when(accessDao.calculateWork(user)).thenReturn(0).thenReturn(15) 

您可以指示Mokcito首先返回一個答案,然後返回另一個答案。但請注意,最後一個將會「重複」。即總是返回15(如果您甚至有更多的調用該方法)。

相關問題