spring进行mock测试
目录
什么是mock?
mock有哪些工具?
以下是关于spring测试的相关,详细可以查看:
https://docs.spring.io/spring-framework/docs/current/spring-framework-reference/testing.html#testing-introduction
代码下载:https://gitee.com/hong99/spring/issues/I1N1DF
实现源码
注:在项目base_spring 下面新增包
项目结构
MockMvc(调用控制器层)
代码下载:https://gitee.com/hong99/spring/issues/I1N1DF
最后
什么是mock?
mock指的是通过模拟数据来使程序完成流程的运行,简单说一句就是自己造数据模拟流程。
mock有哪些工具?
JUnit
参考:https://junit.org/junit5/
TestNG
参考:https://testng.org/doc/
AssertJ
参考:https://joel-costigliola.github.io/assertj/
MockObjects
参考:http://www.mockobjects.com/
Mockito
参考:https://site.mockito.org/
EasyMock
参考:https://easymock.org/
JMock
参考:https://jmock.org/
DbUnit
参考:https://www.dbunit.org/
Testcontainers
参考:https://www.testcontainers.org/
Grinder
参考:https://sourceforge.net/projects/grinder/
SpringMockK
參考:https://github.com/Ninja-Squad/springmockk
spring自带(spring-test):
参考:
https://docs.spring.io/spring-framework/docs/current/spring-framework-reference/testing.html
https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/mock/web/package-summary.html
https://blog.csdn.net/u013553309/article/details/89680632?biz_id=102&utm_term=spring%20mock&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduweb~default-0-89680632&spm=1018.2118.3001.4187
当然还有很多工具....你确定你学得完?还是找几个常用的用吧,毕竟这些只是辅助,大部分都大同小异,可以自行了解需要的。建议用spring自带+junit最多再加一个testNG
以下是关于spring测试的相关,详细可以查看:
https://docs.spring.io/spring-framework/docs/current/spring-framework-reference/testing.html#testing-introduction
代码下载:https://gitee.com/hong99/spring/issues/I1N1DF
实现源码
注:在项目base_spring 下面新增包
项目结构
ReflectionTestUtils
为spring自带的一个mock工具,当然只是冰山一角,需要更详细了解可以上官网。
com.hong.spring.junit.bean.Student
package com.hong.spring.junit.bean;
/**** 功能描述:学生** @param:* @return:* @auther: csh* @date: 2020/7/22 18:53*/
public class Student {
private Integer age;
private String name;
private Integer id;public void setAge(Integer age) {
this.age = age;}
public Integer getAge() {
return age;}public void setName(String name) {
this.name = name;}
public String getName() {
return name;}public void setId(Integer id) {
this.id = id;}
public Integer getId() {
return id;}@Override
public String toString() {
return "Student{" +
"age=" + age +
", name='" + name + '\'' +
", id=" + id +
'}';}
}
com.hong.spring.junit.UserService
package com.hong.spring.junit;import com.hong.spring.junit.bean.Student;
import org.springframework.beans.factory.annotation.Autowired;import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;/*** @Auther: csh* @Date: 2020/10/12 17:17* @Description:用户服务*/
public class UserService{@Autowiredprivate String userName;@Autowiredprivate Student student;@PostConstructprivate void start(){System.out.println("start:"+userName);System.out.println("start:"+student);}@PreDestroyprivate void stop(){System.out.println("stop:"+userName);System.out.println("stop:"+student);}
}
MockMvc(调用控制器层)
MockMvc为spring自带mock工具可以通过该功能模拟相关的请求api;
junit.UserServiceTest
package junit;import com.hong.spring.junit.UserService;
import com.hong.spring.junit.bean.Student;
import org.junit.Test;
import org.springframework.test.util.ReflectionTestUtils;/*** @Auther: csh* @Date: 2020/10/12 17:21* @Description:测试:使用ReflectionTestUtils解决依赖注入*/
public class UserServiceTest {/**** 功能描述:通过ReflectionTestUtils测试** @param:* @return:* @auther: csh* @date: 2020/10/12 17:23*/@Testpublic void testUserService(){UserService userService = new UserService();ReflectionTestUtils.setField(userService,"userName","hong");Student student = new Student();student.setAge(100);student.setId(1);student.setName("hong99");ReflectionTestUtils.setField(userService,"student",student);ReflectionTestUtils.invokeMethod(userService,"start");ReflectionTestUtils.invokeMethod(userService,"stop");}
}
运行结果
start:hong
start:Student{age=100, name='hong99', id=1}
stop:hong
stop:Student{age=100, name='hong99', id=1}
junit.MockControllerTest
注:关于控制器是原已有建议下载原码学习!
/*** @Auther: csh* @Date: 2020/10/13 10:14* @Description:通过mock请求控制器*/
public class MockControllerTest {@Testpublic void testHomePage() throws Exception {HomeController controller = new HomeController();MockMvc mockMvc = standaloneSetup(controller).build();mockMvc.perform(get("/")).andExpect(view().name("home"));}
}
运行结果
2020-10-13 10:16:32,577 [main] INFO : 进入了首页!
2020-10-13 10:16:32,582 [main] ERROR: error进入了首页!
代码下载:https://gitee.com/hong99/spring/issues/I1N1DF
最后
在真实工作中,与第三方联调是家常便饭,但是有时候真的人家的接口会晚几天才提供过来,总不能一直等着,通过mock自己模拟一些数据进行测试先把自己的流程跑通,后面再统一联调,而spring提供的mock也很多,ReflectionTestUtils只是其中的一种,可以看看官方文档统一尝试,是一种提升工作效率和质量不错的工具,推荐。如有疑问,请私聊作者或下方留言,谢谢!
参考文章:
https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/test/util/ReflectionTestUtils.html
https://www.lagou.com/lgeduarticle/125128.html
https://www.baeldung.com/spring-reflection-test-utils
https://www.tianmaying.com/tutorial/JunitForSpringBoot
spring进行mock测试相关推荐
- Spring MVC如何测试Controller(使用springmvc mock测试)
在springmvc中一般的测试用例都是测试service层,今天我来演示下如何使用springmvc mock直接测试controller层代码. 1.什么是mock测试? mock测试就是在测试过 ...
- dubbo服务接口如何mock_小程聊微服务-基于dubbo的mock测试系统
一.说在前面 基于微服务或者SOA的自动化测试系统每个公司都有自己的特有的,我今天就主要介绍一下,我们研发的一套mock测试系统. 二.目前面临的问题 1.测试人员面临的测试问题 我公司目前用的是基于 ...
- Mock测试详细介绍及使用
最近在写一个微服务的项目,项目中使用了Mock.Mock 方法是单元测试中常见的一种技术,它的主要作用是模拟一些在应用中不容易构造或者比较复杂的对象,从而把测试与测试边界以外的对象隔离开. 定义 1. ...
- JAVA测试类注解以及Mock测试
我们在项目中,经常要编写一个测试类XXXXXTest,其中一般会用到以下注解: 一.常用注解 1. @RunWith(PowerMockRunner.class) JUnit将会调用@RunWith中 ...
- Java单元测试之模拟利器-使用PowerMock进行Mock测试
首页 国产Linux Linux命令 openSUSE ArchLinux Slackware FreeBSD Ubuntu CentOS Fedora Debian PHP教程 在线教程 登录 注册 ...
- 带你读懂mock测试——单元测试实践篇
1.什么是mock测试? Mock 测试就是在测试过程中,对于某些不容易构造或者不容易获取的比较复杂的对象,用一个虚拟的对象(Mock 对象)来创建以便测试的测试方法. 2.为什么要进行Mock测试? ...
- 我们用到的3种Mock测试方案
Mock 这个词对于测试人员来说并不陌生,当我们要测试的接口 A 依赖接口 B ,可 B 无法满足我们的测试需求时,需要 Mock 一下接口 B,来测试 A.当前端和服务端并行开发时,如果服务端接口 ...
- SpringBoot Web项目Mock测试
1.环境准备 Spring-boot官方给我们提供了测试用的场景启动器:spring-boot-starter-test 如果我们用IDEA创建一个spring项目,默认会给我们在pom里面引入这个依 ...
- Spring Boot Mock
Spring MockMvc 今天来学习下如何使用Spring Mvc来对controller定义的Restful API进行集成测试.MockMVC 类是Spring test 框架的一部分,因此不 ...
最新文章
- 拿来主义——老外写的系统统计脚本
- 读懂python代码_读懂花里胡哨的14行Python代码!
- 错误代码1500什么意思_啊早安打工人是什么梗???
- 如何自定义Hibernate脏检查机制
- 前端学习(902):this指向问题
- stm32 PWM输入捕获
- C#与Matlab混合编程中遇到的“MathWorks.MATLAB.NET.Arrays.MWNumericArray”的类型初始值设定项引发异常。
- redhat as4 上安装 MySQL5
- paip.mysql 导入出错,提示语法错误.txt
- python求梅花数_《梅花易数》又叫梅花数
- 系统设计.如何设计一个秒杀系统(完整版)
- shell命令查阅端口信息_Powershell 执行外部命令
- 【收藏防丢】rar压缩包忘记密码怎么办?手把手教你轻松解决
- 计算机mc mr,【科普贴】计算器上的GT、CE、AC、MU、MC、MR、M-、M+都是什么?
- py4j开发配置idea+python
- vue中的几个动效网站
- signature=dd4c0ce5ed341fbfafa07eb3d3275ec3,SIGNATURE-FREE BUFFER OVERFLOW ATTACK BLOCKER
- 关于有偿提供拼图响应式后台的通知
- Android studio模拟器尺寸和真机不一样的原因
- 正则表达式re模块用法总结