【发布时间】:2021-09-28 13:27:28
【问题描述】:
我有服务 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 中的“if”进入 else,因为它是错误的,我如何在服务 A 方法调用中传递存根 dto,我不能使用参数捕获器,因为在方法调用之前无法捕获值。 除了改变服务方式还有什么解决办法?
【问题讨论】:
标签: java spring-boot junit mocking mockito