添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

springboot单元测试启动慢

  • 单元测试是项目开发中必不可少的一环,在 SpringBoot 的项目中,我们用@SpringBootTest 注解来标注一个测试类,在测试类中注入这个接口的实现类之后对每个方法进行单独测试。实际上,@SpringBootTest 注解还提供了两个参数,好好利用这两个参数就可以让测试类的启动速度变得更快。
  • #:webEnvironment 这个属性决定了测试类要不要启动一个 web 环境,说白了就是要不要启动一个 Tomcat 容器,可选的值为:

  • MOCK, 启动一个模拟的 Servlet 环境,这是默认值
  • RANDOM_PORT,启动一个 Tomcat 容器,并监听一个随机的端口号
  • DEFINED_PORT,启动一个 Tomcat 容器,并监听配置文件中定义的端口(未定义则默认监听8080)
  • NONE,不启动 Tomcat 容器
  • #:classes classes 属性用来指定运行测试类需要装载的 class 集合,如果不指定,那么会默认装载 @SpringBootConfiguration 注解标注的类,其实 @SpringBootApplication 的源码里就引入了这个注解:

    @Target({ElementType.TYPE})
    @Retention(RetentionPolicy.RUNTIME)
    @Documented
    @Inherited
    @SpringBootConfiguration
    @EnableAutoConfiguration
    @ComponentScan(
        excludeFilters = {@Filter(
        type = FilterType.CUSTOM,
        classes = {TypeExcludeFilter.class}
    ), @Filter(
        type = FilterType.CUSTOM,
        classes = {AutoConfigurationExcludeFilter.class}
    public @interface SpringBootApplication {
        // ...
    

    也就是说,如果我们不指定classes属性,那么启动测试类时需要加载的Bean的数量和正常启动一次入口类(即有@SpringBootApplication注解的类)加载的 Bean 数量是一样的。

  •