作为一套微服务的解决方案,怎么会缺乏测试呢?spring boot 可以支持不同的环境的测试
话不多说,看下pom
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
</dependency>
spring-boot-starter-test里面包含的spring boot 测试框架中需要的内容,还包括我们的老朋友junit等。看下我们的业务代码
package com.shuqi.controller;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class HelloController {
@Value("${env}")
private String env;
@RequestMapping("/hello")
public String hello() {
return "hello " + env;
}
}
里面的操作是通过运行时环境中得到env这个属性的值,然后通过controller中的hello暴露出去。功能比较简单。看下我们测试包中的resources目录下的内容,包含两个内容application-dev.yml与application-test.yml。他们之间的区别就是里面的env的属性值不同。在application-dev.yml中的文件内容是env: dev
。在application-test.yml中的文件内容是env: test
。东西都准备好了,看下我们的测试方法
package com.shuqi;
import com.shuqi.controller.HelloController;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.boot.test.SpringApplicationConfiguration;
import org.springframework.test.context.ActiveProfiles;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import javax.annotation.Resource;
@ActiveProfiles("test")
@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(ApplicationMain.class)
public class MyTest {
@Resource
private HelloController helloController;
@Test
public void test() {
System.out.println(helloController.hello());
}
}
其中有一个ActiveProfiles的注解,当里面写“test”就会找到application-test.yml的文件作为配置文件,那么属性也自然取的是其中的属性。如果是dev也是相同的道理。运行一下看到结果hello test
。然后将ActiveProfiles切换成dev,看到结果hello dev
。通过这种测试切换环境测试是不是超级方便。即测了功能也测了环境。
下节将的内容是:SpringBoot基础教程(十五)——与rabbitmq的结合