SpringBoot 2.x (4):配置文件与单元测试
SpringBoot的配置文件有默认的application.properties
还可以使用YAML
区别:
application.properties示例:
server.port=8090
server.session-timeout=30
server.tomcat.max-threads=0
server.tomcat.uri-encoding=UTF-8
application.yml示例:
server:
port: 8090
session-timeout: 30
tomcat.max-threads: 0
tomcat.uri-encoding: UTF-8
两种方式都优于SSM的XML配置形式,个人更偏向于使用properties文件
SpringBoot默认的配置项:
这里不多写了,可以去Spring官网查找
也可以参考一位大佬的博客:
https://www.cnblogs.com/SimpleWu/p/10025314.html
如何在代码中读取配置文件中的自定义信息呢?
比如:
file.path=D:\\temp\\images\\
想要在代码中获取这个值的话:
@Value("${file.path}") private String FILE_PATH;
将配置文件映射到实体类:
第一种方式:手动给实体类属性注入
配置文件:
test.name=springboot
test.domain=www.dreamtech.org
实体类:
package org.dreamtech.springboot.domain; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; @Component public class ServerSettings { @Value("${test.name}") private String name; @Value("${test.domain}") private String domain; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getDomain() { return domain; } public void setDomain(String domain) { this.domain = domain; } }
Controller:
@Autowired private ServerSettings serverSettings; @RequestMapping("/test") @ResponseBody private ServerSettings test() { return serverSettings; }
第二种方式:根据前缀自动注入
实体类:
package org.dreamtech.springboot.domain; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.stereotype.Component; @Component @ConfigurationProperties(prefix = "test") public class ServerSettings { private String name; private String domain; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getDomain() { return domain; } public void setDomain(String domain) { this.domain = domain; } }
注意:如果使用了前缀的方式,那么不能再使用@Value注解了!
下面进行SpringBoot测试学习:
普通的单元测试:
首先导入依赖:通常SpringBoot新项目带有这个依赖,如果没有,自行导入即可
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency>
在test目录下新建测试类:
@Test用于测试;@Before测试前运行;@After测试后运行
package org.dreamtech.springboot; import org.junit.After; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.context.junit4.SpringRunner; import junit.framework.TestCase; @RunWith(SpringRunner.class) @SpringBootTest(classes = { SpringbootApplication.class }) public class SpringBootTestDemo { @Test public void testOne() { System.out.println("hello world!"); TestCase.assertEquals(1, 1); } @Before public void testBefore() { System.out.println("Before"); } @After public void testAfter() { System.out.println("After"); } }
对API接口进行测试:使用MockMVC
MockMVC相当于就是一个HTTP客户端,模拟用户使用浏览器进行操作
写一个接口进行测试:
@RequestMapping("/test") @ResponseBody private String test() { return "test"; }
测试类:
package org.dreamtech.springboot; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.context.junit4.SpringRunner; import org.springframework.test.web.servlet.MockMvc; import org.springframework.test.web.servlet.MvcResult; import org.springframework.test.web.servlet.request.MockMvcRequestBuilders; import org.springframework.test.web.servlet.result.MockMvcResultMatchers; import junit.framework.TestCase; @RunWith(SpringRunner.class) @SpringBootTest(classes = { SpringbootApplication.class }) @AutoConfigureMockMvc public class MockMvcTest { @Autowired private MockMvc mockMvc; @Test public void apiTest() throws Exception { // 以GET方式访问/test路径,如果返回是200状态码说明调用成功 MvcResult mvcResult = mockMvc.perform(MockMvcRequestBuilders.get("/test")) .andExpect(MockMvcResultMatchers.status().isOk()).andReturn(); TestCase.assertEquals(mvcResult.getResponse().getStatus(), 200); } }
最后记录一点有趣的东西:
启动的时候显示SpringBoot多单调啊,不如找一些好看的!
在classpath下面写一个banner.txt:
//////////////////////////////////////////////////////////////////// // _ooOoo_ // // o8888888o // // 88" . "88 // // (| ^_^ |) // // O\ = /O // // ____/`---'\____ // // .' \\| |// `. // // / \\||| : |||// \ // // / _||||| -:- |||||- \ // // | | \\\ - /// | | // // | \_| ''\---/'' | | // // \ .-\__ `-` ___/-. / // // ___`. .' /--.--\ `. . ___ // // ."" '< `.___\_<|>_/___.' >'"". // // | | : `- \`.;`\ _ /`;.`/ - ` : | | // // \ \ `-. \_ __\ /__ _/ .-` / / // // ========`-.____`-.___\_____/___.-`____.-'======== // // `=---=' // // ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ // // 佛祖保佑 永不宕机 永无BUG // //////////////////////////////////////////////////////////////////// Spring Boot Version: ${spring-boot.version}