Spring Boot的测试,和普通项目的测试类同,可以继续使用我们熟悉的测试工具。当然,这里的测试,主要还是后台代码的测试。

主要需要注意的地方仅有三点:

1、依赖包的引入:pom.xml中仅依赖spring-boot-starter-test,它把相关的依赖全部引入。

2、在测试类上的注解,常用的注解有三个

@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(classes = Application.class)
@WebAppConfiguration

这三个注解,只要注意第二个注解括号内的Application.class就行,把它替换为项目的启动类即可。

我们前面spring-boot-sample-mysql工程的启动类为SpringBootSampleMysqlApplication,那么测试类上的注解就是

@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(classes = SpringBootSampleMysqlApplication.class)
@WebAppConfiguration

3、测试类的文件结构,保持src/test/java和src/main/java结构一直,即:包+文件夹。

如:com.example包service中类的测试,那么在src/test/java也是建立com.example包,再在包下建立文件夹service.

注:由于我们测试的启动类用的是项目的启动类,所以Spring Boot项目的测试配置文件任然用src/main/resources的。

下面贴两个个测试类代码

1、服务类的

[java] view plain copy

  1. package com.example.service;
  2. import java.util.List;
  3. import org.junit.Assert;
  4. import org.junit.Test;
  5. import org.junit.runner.RunWith;
  6. import org.springframework.beans.factory.annotation.Autowired;
  7. import org.springframework.boot.test.SpringApplicationConfiguration;
  8. import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
  9. import org.springframework.test.context.web.WebAppConfiguration;
  10. import com.example.Application;
  11. import com.example.domain.TestPOJO;
  12. import com.example.dto.HotelDto;
  13. @RunWith(SpringJUnit4ClassRunner.class)
  14. @SpringApplicationConfiguration(classes = Application.class)
  15. @WebAppConfiguration
  16. public class TestServicesTest {
  17. @Autowired
  18. TestServices testServices;
  19. @Test
  20. public void testShow() {
  21. String expectedResult="hello world!";
  22. String result=testServices.show();
  23. Assert.assertTrue("数据一致", expectedResult.equals(result));
  24. Assert.assertFalse("数据不一致", !expectedResult.equals(result));
  25. }
  26. @Test
  27. public void testShowDao() {
  28. List<TestPOJO> testPOJOList=testServices.showDao(10);
  29. Assert.assertTrue("数据集不对", testPOJOList.size()==1);
  30. Assert.assertTrue("数据一致", testPOJOList.get(0).getName().equals("nice"));
  31. }
  32. @Test
  33. public void testFindByCountry() {
  34. List<HotelDto> testPOJOList=testServices.findByCountry("US");
  35. Assert.assertTrue("数据集不对", testPOJOList.size()==1);
  36. Assert.assertTrue("数据一致", testPOJOList.get(0).getCityName().equals("San Francisco"));
  37. }
  38. }

2、controller类的

[java] view plain copy

  1. package com.example.controller;
  2. import java.util.List;
  3. import org.junit.Assert;
  4. import org.junit.Before;
  5. import org.junit.Test;
  6. import org.junit.runner.RunWith;
  7. import org.springframework.beans.factory.annotation.Autowired;
  8. import org.springframework.boot.test.SpringApplicationConfiguration;
  9. import org.springframework.http.MediaType;
  10. import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
  11. import org.springframework.test.context.web.WebAppConfiguration;
  12. import org.springframework.test.web.servlet.MockMvc;
  13. import org.springframework.test.web.servlet.MvcResult;
  14. import org.springframework.test.web.servlet.request.MockMvcRequestBuilders;
  15. import org.springframework.test.web.servlet.setup.MockMvcBuilders;
  16. import org.springframework.web.context.WebApplicationContext;
  17. import com.example.Application;
  18. import com.example.domain.TestPOJO;
  19. import com.example.dto.HotelDto;
  20. import com.example.service.TestServices;
  21. import com.fasterxml.jackson.core.JsonProcessingException;
  22. import com.fasterxml.jackson.databind.ObjectMapper;
  23. @RunWith(SpringJUnit4ClassRunner.class)
  24. @SpringApplicationConfiguration(classes = Application.class)
  25. @WebAppConfiguration
  26. public class TestControllerTest {
  27. MockMvc mvc;
  28. @Autowired
  29. WebApplicationContext webApplicationConnect;
  30. @Autowired
  31. TestServices testServices;
  32. String expectedJson;
  33. @Before
  34. public void setUp() throws JsonProcessingException {
  35. mvc = MockMvcBuilders.webAppContextSetup(webApplicationConnect).build();
  36. }
  37. @Test
  38. public void testShow() throws Exception {
  39. String expectedResult = "hello world!";
  40. String uri = "/show";
  41. MvcResult mvcResult = mvc.perform(MockMvcRequestBuilders.get(uri).accept(MediaType.APPLICATION_JSON))
  42. .andReturn();
  43. int status = mvcResult.getResponse().getStatus();
  44. String content = mvcResult.getResponse().getContentAsString();
  45. Assert.assertTrue("错误,正确的返回值为200", status == 200);
  46. Assert.assertFalse("错误,正确的返回值为200", status != 200);
  47. Assert.assertTrue("数据一致", expectedResult.equals(content));
  48. Assert.assertFalse("数据不一致", !expectedResult.equals(content));
  49. }
  50. protected String Obj2Json(Object obj) throws JsonProcessingException {
  51. ObjectMapper mapper=new ObjectMapper();
  52. return mapper.writeValueAsString(obj);
  53. }
  54. @Test
  55. public void testShowDaoInt() throws Exception {
  56. List<TestPOJO> testPOJOList = testServices.showDao(10);
  57. expectedJson = Obj2Json(testPOJOList);
  58. String uri="/showDao?age=10";
  59. MvcResult mvcResult=mvc.perform(MockMvcRequestBuilders.get(uri).accept(MediaType.APPLICATION_JSON)).andReturn();
  60. int status=mvcResult.getResponse().getStatus();
  61. String content=mvcResult.getResponse().getContentAsString();
  62. Assert.assertTrue("错误,正确的返回值为200", status == 200);
  63. Assert.assertFalse("错误,正确的返回值为200", status != 200);
  64. Assert.assertTrue("数据一致", expectedJson.equals(content));
  65. Assert.assertFalse("数据不一致", !expectedJson.equals(content));
  66. }
  67. @Test
  68. public void testShowDaoString() throws Exception {
  69. List<HotelDto> hotelDtoList=testServices.findByCountry("US");
  70. expectedJson = Obj2Json(hotelDtoList);
  71. String uri="/country/US";
  72. MvcResult mvcResult=mvc.perform(MockMvcRequestBuilders.get(uri).accept(MediaType.APPLICATION_JSON)).andReturn();
  73. int status=mvcResult.getResponse().getStatus();
  74. String content=mvcResult.getResponse().getContentAsString();
  75. Assert.assertTrue("错误,正确的返回值为200", status == 200);
  76. Assert.assertFalse("错误,正确的返回值为200", status != 200);
  77. Assert.assertTrue("数据一致", expectedJson.equals(content));
  78. Assert.assertFalse("数据不一致", !expectedJson.equals(content));
  79. }
  80. }

controller类的,为了MockMvc,注入了WebApplicationContext。

原文地址http://www.bieryun.com/833.html

SpringBoot入门系列: Spring Boot的测试相关推荐

  1. SpringBoot精通系列-Spring Boot中如何配置Https

    导语    Https作为一个比较安全的协议,现在已经越来越普及了,特别是在完成小程序或者是公众号开发的时候,https基本上都是刚需了.但是一个HTTPS的证书是比较费钱的事情,个人开发者可以通过云 ...

  2. SpringBoot开发之Spring Boot入门

    SpringBoot开发之SpringBoot入门 一.Spring Boot概述 1.什么是Spring Boot 2.Spring Boot的优点 二.第一个Spring Boot应用 1.创建S ...

  3. 《SpringCloud超级入门》Spring Boot Starter的介绍及使用《七》

    目录 Spring Boot Starter项目创建 自动创建客户端 使用 Starter 使用注解开启 Starter 自动构建 使用配置开启 Starter 自动构建 配置 Starter 内容提 ...

  4. Kafka 入门和 Spring Boot 集成

    2019独角兽企业重金招聘Python工程师标准>>> Kafka 入门和 Spring Boot 集成 概述 kafka 是一个高性能的消息队列,也是一个分布式流处理平台(这里的流 ...

  5. Spring Boot JUnit 测试 Controller

    Spring Boot JUnit 测试 Controller Controller层代码如下: @RestController public class HelloController {Logge ...

  6. Spring Cloud 微服务实战系列-Spring Boot再次入门(一)

    导语   看到标题大家都疑惑,为什么叫做再入门呢?在之前的博客中也分享过相关的内容,但为了让Spring Cloud 微服务实战系列更加完整就再次编写一个入门的内容,也是为了这个系列的内容更加的完整, ...

  7. Spring Cloud 微服务实战系列-Spring Boot再次入门(二)

    导语   在之前的一篇中简单的介绍一些在SpringBoot中常见的使用方式,已经如何实现自定义的一些配置,设置等等的内容,这一次的分享中来介绍一些在Spring Boot 中的高级用法,这样会对Sp ...

  8. springboot(三):Spring boot中Redis的使用

    转自www.ityouknow.com spring boot对常用的数据库支持外,对nosql 数据库也进行了封装自动化. redis介绍 Redis是目前业界使用最广泛的内存数据存储.相比memc ...

  9. Spring boot(十二):Spring boot 如何测试、打包、部署

    博文引用:springboot(十二):springboot如何测试打包部署 开发阶段 单元测试 Spring boot对单元测试的支持已经很完善了. 1 在pom包中添加Spring-boot-st ...

最新文章

  1. 如果要存ip地址,用什么数据类型比较好?
  2. 揭秘高盛区块链报告:区块链技术在五大领域从理论走向实践 | 附报告下载
  3. Python 面向对象 编程(一)
  4. goaccess-nginx日志分析工具简介
  5. java 超时中断_JAVA 超时中断处理
  6. 【MFC系列-第18天】企业信息管理软件开发
  7. Android如何关闭Application
  8. rsa加解密及加签验签
  9. 使用 kind 1 分钟启动一个本地 k8s 开发集群
  10. 赫夫曼编码树(图解+完整代码)
  11. PHP的页面布局怎样设计
  12. 面试现场说要轮岗,实际岗位是地推
  13. Java程序员进阶架构师的五个阶段,你到了哪各阶段?
  14. 三分钟了解企业产品发布会直播全流程
  15. Navicat导入xlsx文件提示无法打开文件
  16. MCE公司:黄芩苷通过激活肝脏 CPT1 酶改善饮食诱导的肥胖和脂肪肝病变
  17. 域名dns劫持问题如何预防
  18. 006.UG_NX实体造型功能
  19. Oracle取小数点部分
  20. 读《读大学,究竟读什么》感悟一

热门文章

  1. 内核中dump_stack的实现原理(3) —— 内核函数printk的实现
  2. 织梦自定义表单地区联动类型不可用的解决办法
  3. jsp学习札记————参数传值
  4. ThreadLocal 在web环境下使用的边界问题
  5. JavaScript函数之实际参数对象(arguments) / callee属性 / caller属性 / 递归调用 / 获取函数名称的方法...
  6. JavaScript设计模式之构造器、模块和原型
  7. WinINet function(2)Request
  8. Consider defining a bean of type ‘com.xg.stupro.service.StudentService‘ in your configuration.
  9. Struts2之数据标签(一)
  10. Ranger知识地图