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)