Mockito:在使用@MockBean注解的类中执行方法时遇到问题

t1qtbnec  于 2022-11-08  发布在  其他
关注(0)|答案(1)|浏览(378)

我是Mockito的新手,所以如果有简单的解决方案,我很抱歉。
我设置了一个测试类:

  1. @ExtendWith(SpringExtension.class)
  2. @TestInstance(TestInstance.Lifecycle.PER_CLASS)
  3. public class dummyServiceTest{
  4. @InjectMocks ServiceA serviceA;
  5. @MockBean ServiceB serviceB;
  6. @BeforeEach
  7. void before() throws Exception {
  8. openMocks(this);
  9. ReflectionTestUtils.setField(serviceA, "maxRetries", 3);
  10. }
  11. @Test
  12. public void serviceATest() {
  13. ...
  14. serviceA.someMethod1();
  15. ...
  16. }
  17. ...
  18. }

服务A类:

  1. @Component
  2. public class ServiceA {
  3. @Autowired ServiceB serviceB;
  4. ...
  5. public void someMethod1() {
  6. ...
  7. serviceB.someMethod2();
  8. ...
  9. }
  10. }

服务B类:

  1. public class ServiceB {
  2. ...
  3. public void someMethod2() {
  4. ...
  5. }
  6. }

TLDR:ServiceA类中的方法在测试类中被调用。该方法调用ServiceB中的方法
在运行测试时,我注意到someMethod 2中没有任何日志显示。我尝试在调试模式下运行,并注意到当我在该方法中添加断点时,它永远不会被命中。只有当我在该方法的第一行添加断点时,它才会到达该终点,但不会前进到该方法的下一行。此外,当它到达该方法的第一行时,它不能访问任何全局变量,甚至不能访问参数(注意:我在这里没有显示任何参数,但是someMethod 3()有参数传递给它)。我应该提到,我向ServiceB添加了一个伪方法,只是为了看看someMethod 2()是否有问题。我只是向该方法添加了一些日志记录行,但是它也出现了同样的问题。
我的问题是,为什么someMethod 3不能被执行?我的猜测是,这与ServiceB用@MockBean注解的事实有关,但不能确切地确定。
任何帮助都是感激不尽的。
编辑:我更新了上面代码的结构。很抱歉给错了代码。

gab6jxml

gab6jxml1#

您需要为服务b创建一个mock,因为它是被注入到服务a中的一个。该mock不会调用服务c的方法--该行为是服务b的内部行为,在对a的测试中不感兴趣。

相关问题