java - 如何使用 mockito 捕获在服务方法中实例化的 DTO
问题描述
我有服务 A
@Service
class ServiceA {
@Override
public void foo(MyDto dto){};
}
和服务 B 作为
@Service
class ServiceB{
@Override
public void bar(){
final MyDto myDto = new MyDto();
serviceA.foo(myDto);
if(myDto.check()){
// block to test further
}
}
}
我尝试按照以下方式测试服务 B 栏方法
@Mock
private ServiceA serviceA
@InjectMocks
private ServiceB unit;
@Test
public void test(){
ArgumentCaptor<MyDto> captor = ArgumentCaptor.forClass(MyDto.class);
when(serviceA.foo(captor.capture()));
MyDto dto = captor.getValue();
dto.setCheck(true);
unit.bar();
}
服务 b 中的“如果”进入 else,因为它是错误的,如何在服务 A 方法调用中传递存根 dto,我不能使用参数捕获器,因为在方法调用之前无法捕获值。除了改变服务方法之外的任何解决方案?
解决方案
您可以使用 power Mockito 来实现这一点。将以下内容添加到您的测试类中。
@RunWith(PowerMockRunner.class)
@PrepareForTest({ServiceB.class})
测试实现如下。
MyDto myDto = Mockito.spy(MyDto.class);
myDto.setCheck(true);
PowerMockito.whenNew(MyDto.class).withNoArguments().thenReturn(myDto);
unit.bar();
在这里,我们创建了一个 myDto 的 spy 对象,并使用 powerMockito.whenNew 来传递这个对象。
推荐阅读
- java - Java - “未使用局部变量”
- python - 在python字符串中查找非英文字符
- reactjs - React:从父函数组件传递到子函数组件时,道具未定义
- javascript - 我们可以在反应中访问无状态组件之外的功能吗?
- python - 通过 Python 在 NetCDF 中减去、平均、挤压、然后子集变量
- javascript - 在javascript中读取特定行的文本文件
- excel - 获取具有多个条件的值
- excel - 对部分文件名的引用重新计算到错误的工作簿
- javascript - 文件上传进度自定义页面 RestAPI SPO
- postgresql - Oracle to_char 数字掩码到 postgres