我有一个 Controller 类ABCController.java
。我正在为该类(class)编写一个 Web 层测试用例。
@WebMvcTest(controllers = ABCController.class)
@RunWith(SpringRunner.class)
public class ABCControllerIntegrationTest {
@Autowired
private MockMvc mockMvc;
@Test
public void testSuccessfulCall(){
mockMvc.perform(get("/pgdDataUrlGet"))
.andExpect(status().isOk());
}
}
我的ABCController.classgenerateSuccessCallEmail()
中有一个函数。我不希望在运行测试用例时调用此函数?
我想做这样的事情:
doNothing.when(controllerObject).generateSuccessCallEmail(anyString);
任何人都可以帮我找到正确的方法吗?问题是 Controller 是通过使用注释 @WebMvcTest
加载的。那么如何模拟 Controller 类中的函数?
最佳答案
我建议采用以下方法:
- 将您的方法提取到另一个 bean (
EmailService
) - 将
EmailService
注入(inject)您的 Controller - 使用 Controller 中服务 bean 的
emailService.generateSuccessCallEmail()
方法。
在测试端,添加
@MockBean
EmailService emailService;
以及该对象上的模拟方法。
关于java - 测试Web层时模拟 Controller 类的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57768112/