SpringBoot入门系列: Spring Boot的测试

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://www.bieryun.com/833.html

优秀的个人博客,低调大师

微信关注我们

原文链接:https://yq.aliyun.com/articles/424390

转载内容版权归作者及来源网站所有!

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。

相关文章

发表评论

资源下载

更多资源
优质分享Android(本站安卓app)

优质分享Android(本站安卓app)

近一个月的开发和优化,本站点的第一个app全新上线。该app采用极致压缩,本体才4.36MB。系统里面做了大量数据访问、缓存优化。方便用户在手机上查看文章。后续会推出HarmonyOS的适配版本。

Mario,低调大师唯一一个Java游戏作品

Mario,低调大师唯一一个Java游戏作品

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

Java Development Kit(Java开发工具)

Java Development Kit(Java开发工具)

JDK是 Java 语言的软件开发工具包,主要用于移动设备、嵌入式设备上的java应用程序。JDK是整个java开发的核心,它包含了JAVA的运行环境(JVM+Java系统类库)和JAVA工具。

Sublime Text 一个代码编辑器

Sublime Text 一个代码编辑器

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。