Java Mockito-返回传递给方法的相同对象
假设我在某个服务类中有以下方法:Java Mockito-返回传递给方法的相同对象,java,mockito,Java,Mockito,假设我在某个服务类中有以下方法: public SomeEntity makeSthWithEntity(someArgs){ SomeEntity entity = new SomeEntity(); /** * here goes some logic concerning the entity */ return repository.merge(entity); } 我想测试此方法的行为,因此希望以以下方式模拟存储库。合并: when(rep
public SomeEntity makeSthWithEntity(someArgs){
SomeEntity entity = new SomeEntity();
/**
* here goes some logic concerning the entity
*/
return repository.merge(entity);
}
我想测试此方法的行为,因此希望以以下方式模拟存储库。合并:
when(repository.merge(any(SomeEntity.class))).thenReturn(objectPassedAsArgument);
然后mocked repository返回传递给它的makesswhithentity
,我可以很容易地测试它
有什么办法可以强制mockito返回objectpassedaargument
?您可以实现应答
,然后使用然后应答()
类似于:
when(mock.someMethod(anyString())).thenAnswer(new Answer() {
public Object answer(InvocationOnMock invocation) {
return invocation.getArguments()[0];
}
});
当然,一旦你有了这个答案,你就可以将答案重构成一个可重用的答案,叫做ReturnFirstArgument
或类似的答案。或者更好地使用mockito附带的答案
when(mock.something()).then(AdditionalAnswers.returnsFirstArg())
其中,AdditionalAnswers.returnsFirstArg()
可以静态导入。使用Java 8 lambdas可以轻松完成:
when(mock.something(anyString())).thenAnswer(i -> i.getArguments()[0]);
你的意思是当(repository.merge(any(SomeEntity.class)),然后返回(entity)?mockito中已存在:addationalAnswers.returnsFirstArgs()
您仍然可以使用thenAnswer(i->i.getArguments()[0])
缩短代码。很好的解决方案,顺便说一句,addationalanswers.returnsFirstArg()
给了我一些错误。很好,这给了我机会的海洋。谢谢你!我没想到这会很常见,可以内置,更不用说“returnsSecondArg”等等。我还喜欢在这里使用then()
别名,因为它读起来更好。是的;)我们引入了then
alias,以便在与静态工厂方法结合使用时更好地阅读自定义答案。@MarkPeters,AdditionalAnswers
用于“不太常见的答案”,它在documentation@smac89但是很普通;)