gpt4 book ai didi

spring - MockBean stub 无效

转载 作者:行者123 更新时间:2023-11-28 21:19:33 30 4
gpt4 key购买 nike

我有一个配置类,其中有一些 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/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com