问题描述
我的 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。