Mockito - 返回与传入方法相同的对象

2022-08-31 14:27:49

让我们想象一下,我在某个服务类中有以下方法:

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


答案 1

您可以使用Mockito发货的答案:

when(mock.something()).then(AdditionalAnswers.returnsFirstArg())

可以静态导入的位置。AdditionalAnswers.returnsFirstArg()


答案 2

您可以实现 一个,然后改用。AnswerthenAnswer()

类似于:

when(mock.someMethod(anyString())).thenAnswer(new Answer() {
    public Object answer(InvocationOnMock invocation) {
        return invocation.getArguments()[0];
    }
});

当然,一旦你有了这个,你可以将答案重构成一个可重用的答案,称为或类似的答案。ReturnFirstArgument


推荐