java - Mockito 访问方法的结果
问题描述
是否可以将方法的结果作为另一个模拟方法的返回值传递?
我有类似的东西:
Order savedOrder = orderDataService.save(order);
try{
savedOrder = orderDataService.findById(savedOrder.getId());
} catch (SomeException e) {
...
}
并且因为我在 save 方法中有一些业务逻辑,所以我不想创建一个模拟结果,而是要访问它并将它也用作 find 方法的结果。
解决方案
我认为您可以使用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 - 不应该被模拟!
推荐阅读
- python - 给定 n 列的数据框,我想计算每列中特定数字的频率
- c++ - 如何向已经存在的 TTree 添加分支:ROOT
- javascript - 这个算法的时间和空间复杂度是 O(n) 还是 O(1)?
- javascript - 节点打字稿集成 - 365 的 MSAL
- javascript - 如何使用反应钩子从数组中切换语言
- javascript - getElementById.value 到 json 到带有 node.js 的 PostgreSQL,不会传递值
- c# - MSTest:CS0117“断言”不包含“ThrowsException”的定义
- c++ - 如何为 Windows 10 安装 Qt5 库以进行 cmake 开发?
- python-3.x - Groupby 并在 groupby 结果中选择最大行
- python - 调用实例类的方法时,“int”对象不可调用