私は Mockito でオブジェクトをモックしています。このオブジェクトの同じメソッドが複数回呼び出され、毎回同じ値を返したいと思っています。
これは私が持っているものです:
LogEntry entry = null; // this is a field
// This method is called once only.
when(mockLogger.createNewLogEntry()).thenAnswer(new Answer<LogEntry>() {
@Override
public LogEntry answer(InvocationOnMock invocationOnMock) throws Throwable {
entry = new LogEntry();
return entry;
}
});
// This method can be called multiple times,
// If called after createNewLogEntry() - should return initialized entry.
// If called before createNewLogEntry() - should return null.
when(mockLogger.getLogEntry()).thenAnswer(new Answer<LogEntry>() {
@Override
public LogEntry answer(InvocationOnMock invocationOnMock) throws Throwable {
return entry;
}
});
問題は、私の getLogEntry メソッドが 1 回しか呼び出されないように見えることです。以降のすべての呼び出しでnull
は、代わりに が返され、テストで NPE が取得されます。
すべての呼び出しにスタブ バージョンを使用するように mockito に指示するにはどうすればよいですか?
================================================== ===============
後世のための事後分析
私は追加の調査を行いましたが、いつものように、それは図書館のせいではなく、私のせいです。私のコードでは、 をgetLogEntry()
呼び出す前にメソッドの 1 つが呼び出されcreateNewLogEntry()
ました。NPE は完全に正当なものでした。テストでは、Mockito でバグを見つけたのではなく、実際に私のコードでバグを見つけました。