Mockito-返回与传递到方法中的对象相同的对象



让我们假设在某个服务类中有以下方法:

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]);

最新更新