如题,本篇主要介绍下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