@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_PORTDEFINED_PORT运行即可。

复制代码
@SpringBootTest(classes = StartApplication.class, webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
相关推荐
刘天远1 小时前
Agent最小权限实现:策略表、临时令牌与撤权回归
java·jvm·人工智能·sqlite
QQ_21696290961 小时前
基于SpringBoot+Vue的小生活平台的设计与实现
java·数据库·vue.js·spring boot·spring·微信小程序·生活
前端兰博1 小时前
06-并发
java
程序员-珍1 小时前
Android studio 突然打不开
android·java
重生之小比特2 小时前
【Java SE】字符串 - String类
java·开发语言·intellij-idea
mldong8 小时前
给若依加审批流,不用 Flowable
java·spring boot·架构
Wang's Blog9 小时前
Java框架快速入门: Spring Security+OAuth2之数据库和实体类的RBAC改造
java·数据库·spring
讳疾忌医丶10 小时前
深度拆解 RocksDB 内核:基于 C++17 的 FIFO 调度状态机与温度阶梯自愈设计
java·c++·算法·架构
郑州光合科技余经理10 小时前
国际版外卖系统:税率字段怎么和订单主流程解耦
android·java·开发语言·前端·后端·php·ai编程