spring boot(24)-test测试
2018-01-20 11:58
381 查看
如果直接用junit去测试一个方法,即使测试成功,这个方法在spring中运行时也可能会有不同的结果,因为spring是一个集成环境,会加载很多东西,从而影响最终结果。本篇将介绍spring boot的集成测试,需要首先理解maven测试
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
开头多了一个注解,springboot就会自动配置好mvc测试环境,就可以注入MockMvc进行mvc测试。
如果url请求返回的json集很大,而只想测试其中一行结果的一个值,可以先取到请求的json结果,再用jackson反序列化成对象,就可以直接取到某一参数进行比对。
pom.xml
<dependency><groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
spring测试
//Spring集成测试 @RunWith(SpringRunner.class) //Run就是@SpringBootApplication注解的类,从这里加载配置 @SpringBootTest(classes = Run.class) public class HelloTest { @Autowired MybatisDao mybatisDao; @Test public void test() { Assert.assertEquals("hello world", mybatisDao.test()); } }这段代码就是在spring环境中测试mybatisDao.test()的返回值是否是"hello world",只需要理解类上面的两个注解即可。
mvc测试
上面是测试方法代码,而mvc测试则可以模拟浏览器请求url//自动配置mvc测试环境 @AutoConfigureMockMvc @RunWith(SpringRunner.class) @SpringBootTest(classes = Run.class) public class HelloTest { @Autowired private MockMvc mockMvc; @Test public void test() throws UnsupportedEncodingException, Exception { //用post方式请求localhost:8080/test,post方法后面紧跟param方法可以传参 mockMvc.perform(MockMvcRequestBuilders.post("/test"))// .param(name, values) //测试响应码是不是200,即请求成功 .andExpect(MockMvcResultMatchers.status().isOk()) //测试请求结果是不是"hello world" .andExpect(MockMvcResultMatchers.content().string("hello world")); //以下代码可以直接得到localhost:8080/test的结果 System.out.println(mockMvc.perform(MockMvcRequestBuilders.post("/test")) .andReturn().getResponse().getContentAsString()); } }
开头多了一个注解,springboot就会自动配置好mvc测试环境,就可以注入MockMvc进行mvc测试。
测试json接口
上面测试的url返回值是一个字符串,如果返回的是json接口,可将test方法换成以下代码,和上面类似。//使用jackson将对象序列化为json字符串 Map map=new HashMap(); map.put("key", "value"); ObjectMapper mapper = new ObjectMapper(); String jsonString = mapper.writeValueAsString(map); //将mvc测试中的string方法改成json方法,比对json字符串值是否相等 mockMvc.perform(MockMvcRequestBuilders.post("/test")) .andExpect(MockMvcResultMatchers.content().json(jsonString));string方法是比对字符串。而json方法是比对json的近似值,对格式要求不严格,只要内容一样,其中的符号差别都可以接受。比如json格式中的单引号和双引号,json方法认为他们是一样的。
如果url请求返回的json集很大,而只想测试其中一行结果的一个值,可以先取到请求的json结果,再用jackson反序列化成对象,就可以直接取到某一参数进行比对。
测试回滚
@Transactional在spring boot程序中是事务注解。如果在测试中使用,它的作用是回滚,无论测试成功或失败,都会回滚对数据库操作。以免测试数据影响到正式数据。这个注解放在类上面或方法上面都可以。surefire测试
spring boot重写了maven的surefire测试插件,修改了规则,如果不理解先看一下maven测试<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <configuration> <includes> <include>**/*Tests.java</include> <include>**/*Test.java</include> </includes> <excludes> <exclude>**/Abstract*.java</exclude> </excludes> </configuration> </plugin>
测试场景
并不建议每个功能都写一个测试用例,这样测试效率是很低的。有很多专门的测试工具如soapUI等,都不需要写代码,直接输入url请求就能测试,各种功能都比junit代码测试强大,而且更于管理。不过在有些场景下只能写代码测试,如maven测试中说到的场景等。所以,只有真正需要的时候,才去写junit代码测试,而不必每个功能都去写测试用例,只要达到效果,同等情况下应选择更高效的测试方法。相关文章推荐
- springboot测试环境中为什么会将mongodb的数据自动存储到test表中
- SpringbootControllerTest
- Spring Boot Test 学习
- Spring Boot Web API测试
- Spring Boot UnitTest
- 通过Junit和Spring-Test测试SpringMVC的web应用
- spring boot test
- 16-SpringBoot——Spring MVC基础-测试
- spring test---测试SpringMvc初识
- [SpringBoot系列]--Spring Hibernate search 注解实现(未测试)
- springboot整合ssm测试过程中遇到的
- Springboot 打包跳过测试
- Spring Boot 1.4 Test Improve
- springboot下配置junit测试环境
- springboot测试例子
- springboot 1.5.2的junit测试
- springboot Junittest 报异常:org.springframework.beans.factory.UnsatisfiedDependencyException:
- SpringBoot Test集成测试
- (24)Spring Boot环境变量读取和属性对象的绑定【从零开始学Spring Boot】
- spring-boot下热部署热启动方案测试汇总