如何在 Spring Boot 单元测试中检查 WebMvcTest 中是否加载了预期的控制器

问题描述

我的 Spring Boot 应用程序中有不止一个控制器。我已经使用 @WebMvcTest 编写了 UnitTest 而没有定义特定的控制器类。如何检查当前 UnitTest 上下文中加载的 Controller 类

解决方法

当您在运行 @WebMvcTest 时获得 Spring 测试上下文时,您可以尝试注入您的控制器(它们也是 Spring Bean)或检查该 bean 是否存在于 WebApplicationContext 中。

以下测试使用两种方法:

@WebMvcTest(MyController.class)
class MyControllerTest {

  @Autowired
  private MockMvc mockMvc;

  @Autowired(required = false)
  private OtherController otherController;

  @Autowired(required = false)
  private MyController myController;

  @Autowired
  private WebApplicationContext webApplicationContext;

  @Test
  void test() throws Exception {

    assertNull(otherController);
    assertNotNull(myController);

    assertNotNull(webApplicationContext.getBean(MyController.class));
    assertThrows(NoSuchBeanDefinitionException.class,() -> webApplicationContext.getBean(OtherController.class));

  }
}

您也可以从 required=false 中删除 @Autowired,然后您的测试将立即失败,因为它无法注入请求的控制器 bean。