Java 在测试web层时模拟控制器类的方法

Java 在测试web层时模拟控制器类的方法,java,spring-boot,mockito,Java,Spring Boot,Mockito,我有一个控制器类ABCController.java。我正在为这个类编写一个Web层测试用例 @WebMvcTest(controllers=ABCController.class) @RunWith(SpringRunner.class) 公共类ABCControllerIntegrationTest{ @自动连线 私有MockMvc-MockMvc; @试验 public void testSuccessfulCall(){ mockMvc.perform(get(“/pgddataulge

我有一个控制器类
ABCController.java
。我正在为这个类编写一个Web层测试用例

@WebMvcTest(controllers=ABCController.class)
@RunWith(SpringRunner.class)
公共类ABCControllerIntegrationTest{
@自动连线
私有MockMvc-MockMvc;
@试验
public void testSuccessfulCall(){
mockMvc.perform(get(“/pgddataulget”))
.andExpect(status().isOk());
}
}
my
ABCController.class generateSuccessCallEmail()中有一个函数
。我不希望在运行testcase时调用此函数

我想这样做:

doNothing.when(controllerObject).generatesSuccessCalleMail(anyString);

有谁能帮我找到正确的方法吗?问题是控制器是通过使用注解
@WebMvcTest
加载的。那么如何在控制器类中模拟函数呢?

我建议采用以下方法:

  • 将您的方法提取到另一个bean(
    EmailService
  • EmailService
    注入控制器
  • 从控制器中的服务bean使用
    emailService.generateSuccessCallEmail()
    方法
在测试端,添加

@MockBean
EmailService emailService;

和此对象上的模拟方法。

您需要为我们指定控制器的外观,以帮助您更好地执行测试用例时无法更改方法的行为(定义)。。尽管您可以模拟现有的行为。如果ABCController.class generateSuccessCallEmail()返回一个字符串值为的字符串mock,那么mock方法将不会执行您的实际行为。我不希望在运行testcase时执行该方法,因为它将向一群人发送电子邮件。这就是我想模拟该方法的原因,并且在调用它时什么都不做