打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
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、服务类的

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

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

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
Spring单元测试
Junit使用简明手册
java单元测试(使用junit)
Java 中文排序
!selenium 总结篇,常见方法和页面元素的操作
Netty4实战第十章:Netty应用的单元测试
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服