2017-04-07 5 views
0

テストメソッドで呼び出されているDaoを同じオブジェクトで2回(パラメータの)異なる内部状態でモックする方法。Daoを2度モックするが、同じオブジェクトで呼び出される方法は?

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) 

あなたは最初に1つの答えを返し、次にもう1つの答えを返すよう指示することができます。しかし、最後の1つが "繰り返される"ことに注意してください。つまり、常に15を返します(そのメソッドをさらに呼び出している場合)。

関連する問題