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

时间:2014-10-02 13:27:20

标签: java 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);

然后,mocked repository返回makesSthWithEntity传递给它的内容,我可以轻松测试它。

任何想法如何强制mockito返回 objectPassedAsArgument

3 个答案:

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