SpringBoot入门系列: Spring Boot的测试

简介: Spring Boot的测试,和普通项目的测试类同,可以继续使用我们熟悉的测试工具。当然,这里的测试,主要还是后台代码的测试。 主要需要注意的地方仅有三点: 1、依赖包的引入:pom.xml中仅依赖spring-boot-starter-test,它把相关的依赖全部引入。

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

相关文章
|
2月前
|
Java 测试技术 开发者
必学!Spring Boot 单元测试、Mock 与 TestContainer 的高效使用技巧
【10月更文挑战第18天】 在现代软件开发中,单元测试是保证代码质量的重要手段。Spring Boot提供了强大的测试支持,使得编写和运行测试变得更加简单和高效。本文将深入探讨Spring Boot的单元测试、Mock技术以及TestContainer的高效使用技巧,帮助开发者提升测试效率和代码质量。
218 2
|
2月前
|
测试技术 持续交付 开发者
探索自动化测试的无限可能:从入门到精通
在软件开发领域,确保产品质量是至关重要的。自动化测试作为一种高效、可靠的测试方法,正逐渐成为行业标准。本文将带你深入了解自动化测试的世界,从基础概念到实践技巧,帮助你掌握这一强大的工具。无论你是初学者还是有经验的开发者,都能从中获得宝贵的知识和启发。
|
2月前
|
Java 测试技术 开发者
初学者入门:掌握单元测试的基础与实践
【10月更文挑战第14天】单元测试是一种软件测试方法,它验证软件中的最小可测试单元——通常是单独的函数或类——是否按预期工作。单元测试的目标是确保每个模块在其自身范围内正确无误地运行。这些测试应该独立于其他模块,并且应该能够反复执行而不受外部环境的影响。
60 2
|
29天前
|
Java 测试技术 持续交付
【入门思路】基于Python+Unittest+Appium+Excel+BeautifulReport的App/移动端UI自动化测试框架搭建思路
本文重点讲解如何搭建App自动化测试框架的思路,而非完整源码。主要内容包括实现目的、框架设计、环境依赖和框架的主要组成部分。适用于初学者,旨在帮助其快速掌握App自动化测试的基本技能。文中详细介绍了从需求分析到技术栈选择,再到具体模块的封装与实现,包括登录、截图、日志、测试报告和邮件服务等。同时提供了运行效果的展示,便于理解和实践。
84 4
【入门思路】基于Python+Unittest+Appium+Excel+BeautifulReport的App/移动端UI自动化测试框架搭建思路
|
25天前
|
Java 测试技术 Android开发
探索自动化测试的奥秘:从入门到精通
【10月更文挑战第37天】本文将带你进入自动化测试的世界,从基础知识到实战案例,逐步揭示自动化测试的神秘面纱。我们将一起探讨如何利用代码来简化测试过程,提高效率,并确保软件质量。无论你是初学者还是有经验的开发者,这篇文章都能为你提供有价值的见解和技巧。让我们一起踏上这段探索之旅吧!
|
1月前
|
机器学习/深度学习 自然语言处理 前端开发
前端神经网络入门:Brain.js - 详细介绍和对比不同的实现 - CNN、RNN、DNN、FFNN -无需准备环境打开浏览器即可测试运行-支持WebGPU加速
本文介绍了如何使用 JavaScript 神经网络库 **Brain.js** 实现不同类型的神经网络,包括前馈神经网络(FFNN)、深度神经网络(DNN)和循环神经网络(RNN)。通过简单的示例和代码,帮助前端开发者快速入门并理解神经网络的基本概念。文章还对比了各类神经网络的特点和适用场景,并简要介绍了卷积神经网络(CNN)的替代方案。
|
2月前
|
安全 Java 数据库
shiro学习一:了解shiro,学习执行shiro的流程。使用springboot的测试模块学习shiro单应用(demo 6个)
这篇文章是关于Apache Shiro权限管理框架的详细学习指南,涵盖了Shiro的基本概念、认证与授权流程,并通过Spring Boot测试模块演示了Shiro在单应用环境下的使用,包括与IniRealm、JdbcRealm的集成以及自定义Realm的实现。
46 3
shiro学习一:了解shiro,学习执行shiro的流程。使用springboot的测试模块学习shiro单应用(demo 6个)
|
2月前
|
存储 人工智能 Java
将 Spring AI 与 LLM 结合使用以生成 Java 测试
AIDocumentLibraryChat 项目通过 GitHub URL 为指定的 Java 类生成测试代码,支持 granite-code 和 deepseek-coder-v2 模型。项目包括控制器、服务和配置,能处理源代码解析、依赖加载及测试代码生成,旨在评估 LLM 对开发测试的支持能力。
48 1
|
2月前
|
监控 Java Maven
springboot学习二:springboot 初创建 web 项目、修改banner、热部署插件、切换运行环境、springboot参数配置,打包项目并测试成功
这篇文章介绍了如何快速创建Spring Boot项目,包括项目的初始化、结构、打包部署、修改启动Banner、热部署、环境切换和参数配置等基础操作。
154 0
|
3月前
|
SQL 监控 druid
springboot-druid数据源的配置方式及配置后台监控-自定义和导入stater(推荐-简单方便使用)两种方式配置druid数据源
这篇文章介绍了如何在Spring Boot项目中配置和监控Druid数据源,包括自定义配置和使用Spring Boot Starter两种方法。