假设我在某个服务类中有以下方法:
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);
然后,mocked repository返回makesSthWithEntity
传递给它的内容,我可以轻松测试它。
任何想法如何强制mockito返回 objectPassedAsArgument
?
答案 0 :(得分:67)
或者更好地使用mockito发送的答案
when(mock.something()).then(AdditionalAnswers.returnsFirstArg())
可以静态导入AdditionalAnswers.returnsFirstArg()
。
答案 1 :(得分:29)
您可以实施Answer
,然后改用thenAnswer()
。
类似于:
when(mock.someMethod(anyString())).thenAnswer(new Answer() {
Object answer(InvocationOnMock invocation) {
return invocation.getArguments()[0];
}
});
当然,一旦你有了这个,你可以将答案重构为一个名为ReturnFirstArgument
或类似的可重用答案。
答案 2 :(得分:0)
使用Java 8 lambda可以轻松完成
:when(mock.something(anyString())).thenAnswer(i -> i.getArguments()[0]);