java - 测试Web层时模拟 Controller 类的方法

标签 java spring-boot mockito

我有一个 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/

相关文章:

java - 构建 Maven 项目时出现问题 - 未将库包含到 jar 中

java - 无法让mockito模拟公共(public)类的公共(public)方法

java - 如何注入(inject)java.io.File然后设置其名称

java - 我应该在哪里放置在 Tomcat 上运行的 servlet、jsp 应用程序的数据文件?

java - Saving BufferedImages 将图像保存到 Java Eclipse 工作区而不是保存到 C 盘

java - 如何使用非主要 Activity 在统一游戏中捕获自定义网址?

java - com.fasterxml.jackson.databind.exc.InvalidDefinitionException : Cannot construct instance of `org.springframework.web.multipart.MultipartFile`

java - 在 Spring Boot 中使用 JavaMailSender

java - 当我们无法将模拟对象传递给类的实例时如何使用 Mockito

java - 有没有一种方法可以调用从没有自己的构造函数的子类获取参数的父类构造函数?