@SpringBootTest

1.源码

复制代码
public static enum WebEnvironment {
    MOCK(false),
    RANDOM_PORT(true),
    DEFINED_PORT(true),
    NONE(false);

    private final boolean embedded;

    private WebEnvironment(boolean embedded) {
        this.embedded = embedded;
    }

    public boolean isEmbedded() {
        return this.embedded;
    }
}

2.模式

@SpringBootTest有如上四种模式:

  • MOCK:模拟了一个Servlet运行环境,只运行Spring容器,真正的Tomcat服务器不启动,因此不能监听端口。它可以直接测试代码,不走真实网络。
  • RANDOM_PORT:和开发环境一样,Tomcat服务器启动,Spring容器运行在Tomcat服务器中,但监听端口随机。
  • DEFINED_PORT:和RANDOM_PORT相比,指定监听端口。
  • NONE:和MOCK相比,没有Web环境,和web相关的Controller层无法测试,Service、Mapper等测试不影响。

@SpringBootTest默认是MOCK模式,也可自行指定环境:

java 复制代码
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)

3.@SpringBootTest报错常见原因

1.未指定启动类

手动指定即可

java 复制代码
@SpringBootTest(classes = StartApplication.class)

2.默认测试环境没有相关依赖

比如项目开发环境注册了WebSocket Server Bean,而这个对象启动需要ServerContainer ,但这个WebSocket容器在Tomcat才有。SpringBootTest默认是MOCK模式,Tomcat都没启动,所以报错。

可选择RANDOM_PORT或DEFINED_PORT运行即可。

复制代码
@SpringBootTest(classes = StartApplication.class, webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
相关推荐
Dovis(誓平步青云)2 分钟前
家里设备越来越多,如何用一张空间地图控制灯光和温度![
android·java·前端·javascript·人工智能·电脑
yuniko-n20 分钟前
【Java】字符串相关坑点
java·开发语言·python
Terra.K22 分钟前
Spring AI day1(SSE+AI)
java·人工智能·spring·springai
斑鸠喳喳24 分钟前
线程本地存储 ThreadLocal
java·后端
Wang's Blog1 小时前
Java框架 SpringCloud 快速入门: 服务拆分案例 Demo
java·开发语言·spring cloud
DongQiShanRen2 小时前
裁决台账双向互校(上):名册与实物的第一道对账
java·linux·运维·数据库·人工智能·自然语言处理·数据挖掘
cpolar技术支持2 小时前
Spring Boot 接口本地正常,异地前端却报跨域?用 cpolar 跑通 CORS 预检与白名单
java·springboot·cpolar·前后端分离·cors
wuminyu2 小时前
Virtual Thread重投递至ForkJoinPool任务队列过程解析
java·linux·c语言·jvm·c++
小蒜学长2 小时前
在线保险服务与管理平台的设计与实现(代码+数据库+LW)
java·数据库·spring boot·后端·服务平台·在线保险
掉进电商坑三年没爬出来的东叔3 小时前
青龙面板进阶:一个面板聚合多平台签到,所有积分自动领
java·开发语言