首页 > 解决方案 > Mockito 访问方法的结果

问题描述

是否可以将方法的结果作为另一个模拟方法的返回值传递?

我有类似的东西:

Order savedOrder = orderDataService.save(order);
try{
    savedOrder = orderDataService.findById(savedOrder.getId());
} catch (SomeException e) {
...
}

并且因为我在 save 方法中有一些业务逻辑,所以我不想创建一个模拟结果,而是要访问它并将它也用作 find 方法的结果。

标签: javaspringmockingmockito

解决方案


我认为您可以使用Spy和部分模拟。在一般情况下,假设这样的类:

public class MockedBean {
    public String mockedMethod() {
        return "should have been mocked!";
    }
    public String notMockedMethod() {
        return "should NOT have been mocked!";
    }
}

Yuu 可以进行部分模拟,例如:

@Test
public void test() {
    MockedBean mb = new MockedBean();
    MockedBean spy = Mockito.spy(mb);
    when(spy.mockedMethod()).thenReturn("THE MOCKED VALUE");
    log.info("{}", spy.mockedMethod());
    log.info("{}", spy.notMockedMethod());
}

这将导致输出如下:

20:32:14.180 [main] INFO org.example.mockito.partialmock.PartialMock - 模拟值
20:32:14.183 [main] INFO org.example.mockito.partialmock.PartialMock - 不应该被模拟!


推荐阅读