如题,本篇主要介绍下springboot中测试框架的集成、使用,以及devtool热加载工具的使用。
pom.xml
<!-- spring-boot test支持 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency>测试代码
package com.tingcream.springWeb.test; import java.util.List; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import com.tingcream.springWeb.SpringBootApp; import com.tingcream.springWeb.model.User; import com.tingcream.springWeb.service.UserService; @RunWith(SpringJUnit4ClassRunner.class) @SpringBootTest(classes=SpringBootApp.class, webEnvironment = SpringBootTest.WebEnvironment.MOCK) // MOCK 、 RANDOM_PORT 、 DEFINED_PORT 、NONE public class UserTest { @Autowired private UserService userService; @Test public void test1(){ List<User> list = userService.findUserListByName("张"); System.out.println(list.size()); } }
可以看到,测试类中webEnvironment 环境有四种常量值
MOCK : 即mock环境,一个虚拟的servlet容器环境,不会真的内嵌启动servlet容器,事务对数据库的修改将会自动回滚。
RANDOM_PORT: 随机端口环境,会启动真实的内嵌servlet容器,事务对数据库会造成有效的修改。
DEFINED_PORT:指定端口,会启动真实的内嵌servlet容器,事务对数据库会造成有效的修改。
NONE :作用尚不明确
一般地,我们测试时使用MOCK环境或随机端口环境即可。
devtool的工作的大致原理是:devtool能够使用两个类加载器,一个基本类加载器,另一个是restart类加载器。对于开发者经常修改的代码,每次修改都会触发restart类加载器的一次重启,以重新加载新的class,而基本类加载器不会重启。devtool对于开发者而且仿佛是热加载了,其实不是的,devtool靠的是自动restart类加载器的自动重启技术。
devtool 工具 pom.xml配置
<!-- spring boot devtools 开发者工具 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> <optional>true</optional> <!-- optional 必须修改为true,默认是false --> <!-- optional=true,依赖不会传递,该项目依赖devtools;之后依赖myboot项目的项目如果想要使用devtools,需要重新引入 --> </dependency>
application.properties 配置
#devtools开发工具热加载(重启)排除静态文件 spring.devtools.restart.exclude=resources/**
想知道更多关于devtool的介绍,请参考springboot官网文档 https://docs.spring.io/spring-boot/docs/1.5.15.RELEASE/reference/htmlsingle/。其实官网中还提到了另一种更为高效的热加载技术:JRebel。它不是像devtool一样靠自动重启,而是直接修改被修改过的源文件的class字节码,通过局部更新class达到热加载的效果,这才是真正名副其实的热加载!!
Copyright © 叮叮声的奶酪 版权所有
备案号:鄂ICP备17018671号-1