测试与部署
Spring Boot之所以使用简单,是因为它的工程最终打包成了一个JAR包,并内嵌了Web容器,如Tomcat等,然后以JAR包的形式直接运行。随着云原生和云平台的发展,Spring Boot与Spring Cloud可以完美集成并被部署到云平台上。
测试
Spring Boot提供了很多实用的测试注解,可以在测试时使用。通常情况下,测试由spring-boot-test(包含核心元素)和springboot-test-autoconfigure(支持自动配置测试)两个模块支持,开发人员只需要依赖spring-boot-starter-test包即可。如果应用依赖了spring-boot-starter-test包,则同时依赖表3.3中的类库。
如果使用的是JUnit 4,则需要添加@RunWith(SpringRunner.class)注解;如果使用的是JUnit 5,则不需要添加该注解。Spring Boot提供了@SpringBootTest注解,当需要测试Spring Boot的特性时,该注解可以作为@ContextConfiguration注解的替代。@SpringBootTest注解通过SpringApplication创建测试中使用的ApplicationContext。
在默认情况下,@SpringBootTest注解不会启动服务器。可以通过设置@Spring-BootTest注解的webEnvironment属性来修改测试的运行方式。webEnvironment属性的取值如下:
MOCK(默认):加载Web应用程序上下文并提供模拟Web环境。使用该属性值不会启动嵌入的服务器,它可以与
@AutoConfigureMockMvc或@
AutoConfigure-WebTestClient注解结合使用。
RANDOM_PORT:加载一个
WebServerApplicationContext应用上下文并提供一个真实的Web环境。启动嵌入的服务器并在随机端口上进行监听。
DEFINED_PORT:加载
WebServerApplicationContext应用上下文并提供真实的Web环境。启动嵌入的服务器并在配置的端口上监听(在application.properties文件中配置)或者在默认端口8080上监听。
NONE:使用SpringApplication加载ApplicationContext应用上下文,但不提供任何Web环境。
以3.1.2节中新建的工程为例,测试一下HiController.java接口。代码如下:
@SpringBootTest(webEnvironment =
SpringBootTest.WebEnvironment.
RANDOM_PORT)
class SpringBootExampleApplicationTests {
@Test
public void testHiController(@Autowired
TestRestTemplate rest
Template) {
String body =
restTemplate.getForObject("/hi/springBoot",
String.class);
System.out.println(body);
}
}
如要要测试Spring MVC controllers是否正确工作,可以使用@WebMvcTest注解;如果要测试WebFlux,则使用@WebFluxTest注解。
Spring Boot test框架还提供了很多数据测试的注解,如@DataJpaTest、@JdbcTest、@DataMongoTest、@Data-RedisTest,以及客户端测试注解@RestClientTest等。
打包
在使用Spring Boot进行开发时,如果希望修改类文件或者配置文件后让修改立即生效,则需要用到热部署。在Spring Boot应用的pom文件中添加以下依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<optional>true</optional>
</dependency>
如果是MAVEN工程,Spring Boot提供了打包插件,在pom文件中集成以下插件即可。
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<executable>true</executable>
</configuration>
</plugin>
打包之后是一个JAR包,直接使用$ java -jar spring-bootexample.jar命令即可运行。Spring Boot的测试和部署会在后面的章节中继续介绍。