我正在开发一个Spring Boot应用程序并编写一些junit测试。
但是我发现当我运行任何测试时,tomcat也会启动,这会使那些测试非常缓慢并且浪费很多时间。
当我开发SpringMvc应用程序时,无需启动tomcat就可以运行junit测试,这样可以节省很多时间。
那么,我还是想问问它是否在没有启动tomcat的情况下运行springboot测试?
答案 0 :(得分:0)
默认情况下,使用@SpringBootTest运行测试不会启动嵌入式服务器。 默认情况下,它在MOCK环境中运行。
默认情况下,@ SpringBootTest不会启动服务器。您可以使用 @SpringBootTest的webEnvironment属性可进一步优化您的 测试运行:
MOCK(默认):加载Web ApplicationContext并提供模拟Web 环境。使用此功能时无法启动嵌入式服务器 注解。如果您的类路径中没有网络环境, 此模式透明地回退到创建常规非网络 ApplicationContext。可以结合使用 @AutoConfigureMockMvc或@AutoConfigureWebTestClient(基于模拟) 测试您的Web应用程序。
我想您想要实现的目标可以通过 Slice Test 概念来实现。通常,执行单元测试时,不需要在弹簧容器中具有所有已配置bean的成熟的模拟环境或带有嵌入式服务器的环境。
例如您必须对 Controller 进行单元测试,然后具有 @WebMvcTest 批注,该批注将仅配置与Web相关的bean,而忽略其余的bean。
要测试Spring MVC控制器是否按预期工作,请使用 @WebMvcTest批注。 @WebMvcTest自动配置Spring MVC 基础架构并将扫描到的bean限制为@Controller, @ ControllerAdvice,@ JsonComponent,转换器,GenericConverter, 筛选器,WebMvcConfigurer和HandlerMethodArgumentResolver。定期 使用此批注时,不会扫描@Component bean。
类似地,对于数据库层,有 @DataJpaTest
长话短说:当您打算使用Spring框架进行单元测试时,切片测试是大多数情况下应使用的 。
答案 1 :(得分:-1)
如果要放置以下注释,这将启动嵌入式容器...
@RunWith(SpringRunner.class)
@SpringBootTest
因为,如果您看到SpringBootTestContextBootstrapper.class
类,则该容器已被我们指定@BootstrapWith(SpringBootTestContextBootstrapper.class)
的容器@SpringBootTest
调用
您可以删除这些内容并执行以下操作:
import org.junit.Test;
public class HellotomApplicationTests {
@Test
public void contextLoads() {
}
}
R-Click和RunAs Junit