我是Mockito的新手,所以如果有简单的解决方案,我很抱歉。
我设置了一个测试类:
@ExtendWith(SpringExtension.class)
@TestInstance(TestInstance.Lifecycle.PER_CLASS)
public class dummyServiceTest{
@InjectMocks ServiceA serviceA;
@MockBean ServiceB serviceB;
@BeforeEach
void before() throws Exception {
openMocks(this);
ReflectionTestUtils.setField(serviceA, "maxRetries", 3);
}
@Test
public void serviceATest() {
...
serviceA.someMethod1();
...
}
...
}
服务A类:
@Component
public class ServiceA {
@Autowired ServiceB serviceB;
...
public void someMethod1() {
...
serviceB.someMethod2();
...
}
}
服务B类:
public class ServiceB {
...
public void someMethod2() {
...
}
}
TLDR:ServiceA类中的方法在测试类中被调用。该方法调用ServiceB中的方法
在运行测试时,我注意到someMethod 2中没有任何日志显示。我尝试在调试模式下运行,并注意到当我在该方法中添加断点时,它永远不会被命中。只有当我在该方法的第一行添加断点时,它才会到达该终点,但不会前进到该方法的下一行。此外,当它到达该方法的第一行时,它不能访问任何全局变量,甚至不能访问参数(注意:我在这里没有显示任何参数,但是someMethod 3()有参数传递给它)。我应该提到,我向ServiceB添加了一个伪方法,只是为了看看someMethod 2()是否有问题。我只是向该方法添加了一些日志记录行,但是它也出现了同样的问题。
我的问题是,为什么someMethod 3不能被执行?我的猜测是,这与ServiceB用@MockBean注解的事实有关,但不能确切地确定。
任何帮助都是感激不尽的。
编辑:我更新了上面代码的结构。很抱歉给错了代码。
1条答案
按热度按时间gab6jxml1#
您需要为服务b创建一个mock,因为它是被注入到服务a中的一个。该mock不会调用服务c的方法--该行为是服务b的内部行为,在对a的测试中不感兴趣。