【发布时间】:2019-04-08 15:51:13
【问题描述】:
使用@WebMvcTest 将通过查找@SpringBootConfiguration 类(例如@SpringBootApplication)来自动配置所有Web 层bean。
如果配置类在不同的包中,扫描找不到,可以直接提供给@WebMvcTest吗?
【问题讨论】:
标签: spring spring-boot spring-mvc spring-boot-test
使用@WebMvcTest 将通过查找@SpringBootConfiguration 类(例如@SpringBootApplication)来自动配置所有Web 层bean。
如果配置类在不同的包中,扫描找不到,可以直接提供给@WebMvcTest吗?
【问题讨论】:
标签: spring spring-boot spring-mvc spring-boot-test
以下将指向正确的@SpringBootApplication 类:
@RunWith(SpringJUnit4ClassRunner.class)
@WebMvcTest(controllers = {MyController.class})
@ContextConfiguration(classes={MySpringBootApplicationClass.class})
public class MyControllerTest {
//...
}
【讨论】:
如果您使用 @WebMvcTest 进行测试,则意味着您主要专注于测试 spring mvc 层,而不是更深入地研究应用程序。 p>
所以这个注解只能在一个测试关注Spring的时候使用 MVC 组件. 默认情况下,使用@WebMvcTest 注解的测试将 还自动配置 Spring Security 和 MockMvc(包括对 HtmlUnit WebClient 和 Selenium WebDriver)。对于更细粒度 MockMVC的控制@AutoConfigureMockMvc注解可以 used. 通常 @WebMvcTest 与 @MockBean 或 @Import 来创建您的 @Controller bean 所需的任何协作者.
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Import;
@Configuration
@Import({ CustomerConfig.class, SchedulerConfig.class })
public class AppConfig {
}
然后您可以在 @WebMvcTest 带注释的测试类中使用 @import 导入此配置类,并且这些 bean 应该会在 spring 中被拾取。
【讨论】: