springboot(六)--springTest集成、devtool热加载工具集成

如题,本篇主要介绍下springboot中测试框架的集成、使用,以及devtool热加载工具的使用。 

一、springboot中集成测试框架

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环境或随机端口环境即可。

二、springboot中devtool热加载工具

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>
      
  </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达到热加载的效果,这才是真正名副其实的热加载!!

猜你喜欢

转载自blog.csdn.net/jasnet_u/article/details/81543062