让我们假设我在某些服务类中有以下方法:
public SomeEntity makeSthWithEntity(someArgs){
SomeEntity entity = new SomeEntity();
/**
* here goes some logic concerning the entity
*/
return repository.merge(entity);
}
Run Code Online (Sandbox Code Playgroud)
我想测试这个方法的行为,因此想以repository.merge下面的方式模拟:
when(repository.merge(any(SomeEntity.class))).thenReturn(objectPassedAsArgument);
Run Code Online (Sandbox Code Playgroud)
然后模拟的存储库返回makesSthWithEntity传递给它的内容,我可以轻松地测试它.
任何想法我怎么能强迫mockito返回objectPassedAsArgument?
Bri*_*ice 75
或者更好地使用mockito发送的答案
when(mock.something()).then(AdditionalAnswers.returnsFirstArg())
Run Code Online (Sandbox Code Playgroud)
哪里AdditionalAnswers.returnsFirstArg()可以静态导入.
Mar*_*ers 33
您可以实现一个Answer,然后使用thenAnswer().
类似的东西:
when(mock.someMethod(anyString())).thenAnswer(new Answer() {
Object answer(InvocationOnMock invocation) {
return invocation.getArguments()[0];
}
});
Run Code Online (Sandbox Code Playgroud)
当然,一旦你有了这个,你就可以将答案重构成一个可重复使用的答案ReturnFirstArgument或者类似的答案.
使用 Java 8 lambdas 可以轻松完成:
when(mock.something(anyString())).thenAnswer(i -> i.getArguments()[0]);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
16830 次 |
| 最近记录: |