博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
SpringBoot入门系列: Spring Boot的测试
阅读量:7209 次
发布时间:2019-06-29

本文共 5697 字,大约阅读时间需要 18 分钟。

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

 

在CODE上查看代码片派生到我的代码片

  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

 

在CODE上查看代码片派生到我的代码片

  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://pxgum.baihongyu.com/

你可能感兴趣的文章
android timed gpio (linux 3.0.0) 受时钟控制的gpio【转】
查看>>
idea 关闭代码自动折叠,形参提示,行数栏图标,启动不默认打开上次的项目...
查看>>
mybatis 获取insert返回的主键
查看>>
R绘图 第八篇:绘制饼图(ggplot2)
查看>>
git:could not open a connection to your authentication agent
查看>>
七牛云的使用
查看>>
MySQL问答整理
查看>>
Java JSONArray的封装与解析
查看>>
Linux系统中查找、删除重复文件,释放磁盘空间。
查看>>
phpstudy安装好之后mysql无法启动(亲测可行)
查看>>
网易云terraform实践
查看>>
attenuation
查看>>
vue中$router和$route的区别
查看>>
【转】APK反编译
查看>>
uni-app 如何引入全局方法或变量?
查看>>
mac下python2.x和python3.x的安装方法和升级方法/卸载
查看>>
RabbitMQ消息交换模式简介
查看>>
Android项目中独立Git项目分库后的编译调试时Gradle的配置
查看>>
(原創) 写程序时,要同时以Class Creator和Class User的角色来写程序 (OO) (.NET) (N-Tier) (C/C++)...
查看>>
(轉貼) 如何用Windows Live Writer修改更早之前的舊文?(Web) (Windows Live Writer)
查看>>