spring - MockBean stub 无效

标签 spring spring-boot testing mocking mockito

我有一个配置类,其中有一些 MockBeans 替换了上下文中的实际 bean 以进行测试。

@Configuration
public class MyTestConfig {
    @MockBean
    private MyService myService;
}

我在测试中使用这些模拟:

@Import({ MyTestConfig .class })
public class MyTest {
    @Autowired
    private MyService myService;

    @Test
    public void aTest() {
        ...
    }
}

首先我的想法是在这个 MyTestConfig 配置类中添加 stub ,以便为所有测试预先制作模拟,所以我在 @PostConstruct 方法,它工作得很好——测试中的模拟确实返回了预期值:

@PostConstruct
public void init() {
    when(myService.foo("say hello")).thenReturn("Hello world");
}

但事实证明,构建适用于所有测试的预制模拟可能很棘手,因此我们决定将 stub 转移到测试中。

@Test
public void aTest() {
    when(myService.foo("say hello")).thenReturn("Hello world");
}

这不起作用 - stub 方法返回 null。我们想将 MockBeans 保留在配置类中,但在测试中对它们进行 stub ,那么对于 stub 无效的原因有什么建议吗?

Spring Boot 2.0.5,Mockito 2.22.0

最佳答案

是的,应该在各自的测试用例中执行 stub (除非您有一个共享 stub 场景的测试类,但这一切都归结为偏好)。

但是,要创建 @MockBeans,您需要使用 @SpringBootTest 才能将实际的 beans 替换为模拟。这可以像这个例子一样简单地完成:

@RunWith(SpringRunner.class)
@SpringBootTest
public class MyTest {

    @Autowired
    private MyTestClass testClass;
    @MockBean
    private MyService service;

    @Test
    public void myTest() {
      // testing....
  }

}

关于spring - MockBean stub 无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53442430/

相关文章:

java - javaconfig的Spring单元测试问题

java - 在 Webflux 中解决 Pageable

facebook - 离线测试 facebook like 按钮

laravel - 在 laravel phpunit 中测试数组

java - 如何为生产者确保 kafka 主题?

java - 如何在单元测试时重新初始化静态 final

java - 如何根据 http 状态代码路由从 http 出站网关发出的错误消息?

servlet spring 的 javax.servlet.ServletException : Servlet. init() 抛出异常

spring - 不满意的依赖异常 : Error creating bean with name 'homeController' : Unsatisfied dependency expressed through field 'userDAO'

java - Spring Cloud Zuul传递JWT下游