让我们假设在某个服务类中有以下方法:
public SomeEntity makeSthWithEntity(someArgs){
SomeEntity entity = new SomeEntity();
/**
* here goes some logic concerning the entity
*/
return repository.merge(entity);
}
我想测试这个方法的行为,因此想以以下方式模拟repository.merge
:
when(repository.merge(any(SomeEntity.class))).thenReturn(objectPassedAsArgument);
然后模拟存储库返回makesSthWithEntity
传递给它的内容,我可以很容易地测试它
有什么想法可以强迫mockito返回objectPassedAsArgument
吗?
您可以使用Mockito提供的答案:
when(mock.something()).then(AdditionalAnswers.returnsFirstArg())
其中AdditionalAnswers.returnsFirstArg()
可以静态导入。
您可以实现Answer
,然后使用thenAnswer()
。
类似于:
when(mock.someMethod(anyString())).thenAnswer(new Answer() {
public Object answer(InvocationOnMock invocation) {
return invocation.getArguments()[0];
}
});
当然,一旦你有了这个,你就可以将答案重构为一个可重用的答案,称为ReturnFirstArgument
或类似的答案。
使用Java 8 lambdas:可以轻松完成
when(mock.something(anyString())).thenAnswer(i -> i.getArguments()[0]);