mock 抛出一个异常如何终止_教你使用Mock完成单元测试

fdb244eabf3127be339314f6c1136582.png

更多精彩文章请关注本人微信公众号

d47fe1fde5ccebc2a38107aafa5ad44e.png

1、什么是Mock?

mock是在测试过程中,对于一些不容易构造/获取的对象,创建一个mock对象来模拟对象的行为。比如说你需要调用B服务,可是B服务还没有开发完成,那么你就可以将调用B服务的那部分给Mock掉,并编写你想要的返回结果。 Mock有很多的实现框架,例如Mockito、EasyMock、Jmockit、PowerMock、Spock等等,SpringBoot默认的Mock框架是Mockito,和junit一样,只需要依赖spring-boot-starter-test就可以了。本文代码基于jdk8、junit5、Mockito3

1.1、 Mockito中文文档

Mockito是mocking框架,它让你用简洁的API做测试。而且Mockito简单易学,它可读性强和验证语法简洁。Mockito是GitHub上使用最广泛的Mock框架,并与JUnit结合使用.Mockito框架可以创建和配置mock对象.使用Mockito简化了具有外部依赖的类的测试开发! Mockito具体使用方法见文档https://github.com/hehonghui/mockito-doc-zh#0

1.2、Mockito基本使用方法简介

1)、静态导入会使代码更简洁

import static 

举例:

//创建mock对象,mock一个List接口

2)、验证某些行为

//你可以mock一个具体的类型,而不仅是接口
一旦mock对象被创建了,mock对象会记住所有的交互。然后你就可能选择性的验证你感兴趣的交互。

3)、如何做一些测试桩

//测试桩

4)、其他使用见上面文档

2、MockMVC基于RESTful风格的测试

对于前后端分离的项目而言,无法直接从前端静态代码中测试接口的正确性,因此可以通过MockMVC来模拟HTTP请求。基于RESTful风格的SpringMVC的测试,我们可以测试完整的Spring MVC流程,即从URL请求到控制器处理,再到视图渲染都可以测试。

2.1、初始化MockMvc对象

@Autowired

2.2、完成一些接口的测试

1)、尝试测试一个不存在的请求 /user/1

/**

展示结果:

dd84e3c329bef02865fd0a948f8d9fac.png

2)、在Controller中完成 /user/{id}

/**
修改一下测试类:期待返回的结果是200
@Test

结果展示:

fc7ec9c9dc51a0cc01beb4dbd654d5e9.png

3)、我们可以把结果打印到控制台

// 期望的结果状态 200

运行结果:可以看到并没有返回结果

d04a0afa5ddc48a6fbfc873e318a4d7b.png

4)、结合Mockito构建自定义返回结果

这里就用到了Mockito的应用场景,userService.getById并没有返回结果,但是我们的测试并不关心userService.getById这个方法是否正常,只是在我们的测试中需要用到这个方法,所以我们可以Mock掉UserService的getById方法,自己定义返回的结果,继续我们的测试。
@MockBean

运行结果

0756b097791d140900091af8a8cb7487.png

5)、传参数

@Test

6)、期望返回结果集有两个元素

@Test

运行结果:

5b65af1bdf2e06a91bac55a8116ef044.png

7)、测试Post请求

@Test

3、一些常用API总结

常用的期望:

//使用jsonPaht验证返回的json中code、message字段的返回值

附带常用API解释:

RequestBuilder/MockMvcRequestBuilders:

//根据uri模板和uri变量值得到一个GET请求方式的MockHttpServletRequestBuilder;

MockHttpServletRequestBuilder:

//:添加头信息;

MockMultipartHttpServletRequestBuilder

//:指定要上传的文件;

ResultActions

//:添加验证断言来判断执行请求后的结果是否是预期的;

ResultMatcher/MockMvcResultMatchers

//:请求的Handler验证器,比如验证处理器类型/方法名;此处的Handler其实就是处理请求的控制器;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/336056.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

jconsole查看连接数_在JConsole和VisualVM中查看DiagnosticCommandMBean

jconsole查看连接数我已经将JConsole用作合适的通用JMX客户端已有很多年了。 该工具通常随Oracle JDK一起提供,并且易于使用。 在JMX交互方面,JConsole优于VisualVM的最大优点是JConsole带有内置的MBeans选项卡,而必须为VisualVM中的相同功能…

剑指 Offer 40-----50

50. 第一个只出现一次的字符 原题链接 class Solution { public:char firstUniqChar(string s) {char res ;if(!s.size()) return res;unordered_map<char, int> mmp; for(int i 0; i < s.size(); i) {mmp[s[i]] 1;}for(int i 0; i < s.size(); i){if(mmp[s…

jpa root.join_JPA 2.1和Java EE 7中的JPQL增强功能(第1部分– JOIN ON)

jpa root.joinJava EE 7已经存在了几年&#xff0c;并且提供了一些非常有用且期待已久的功能&#xff0c;例如实体图以及对存储过程和结果映射的更好支持。 有关概述&#xff0c;请参阅Thorben Janssen的博客文章 。 但是&#xff0c;我想添加有关JPA查询语言功能的更详细的摘要…

如何知道一个域名是否存在_域名检测API实现查看一个域名在微信中是否被封

针对微信转发分享链接过程中&#xff0c;您宝贵的域名被微信检测系统过滤拦截而无法正常浏览&#xff0c;例如该网页包含诱导分享内容&#xff0c;被多人投诉等&#xff0c;又例如提示该网页已停止访问等提示。怎么查询域名在微信中是否被封了呢?以上接口可检测到域名的四种异…

LeetCode题集大全

LeetCode 01. 两数之和 LeetCode 02.两数相加 LeetCode 03. 无重复字符的最长子串 LeetCode 07. 整数反转 Leetcode 08. 字符串转换整数 (atoi) LeetCode 09. 回文数 LeetCode 13. 罗马数字转整数 LeetCode 15 二进制中1的个数 Leetcode 19. 删除链表的倒数第N个节点 Le…

qt4.8创建.pri_注意Java 8的[Pri​​mitive] Stream.iterate()中的递归

qt4.8创建.priTagir Valeev关于Stack Overflow的一个有趣问题最近引起了我的注意。 为了简短起见&#xff08;请阅读问题的详细信息&#xff09;&#xff0c;而以下代码则有效&#xff1a; public static Stream<Long> longs() {return Stream.iterate(1L, i ->1L l…

量化指标公式源码_通达信指标公式源码线上阴线指标公式

工作线:(EMA(C,14)),POINTDOT,LINETHICK3,COLOR22ACDE;生命线:(MA(C,25)),LINETHICK1,COLORMAGENTA;不惑线:(MA(C,40)),COLORCYAN,LINETHICK1;姊妹线:(EMA(C,56)),POINTDOT,COLOR33CCDD,LINETHICK1;A3:EMA((((SLOPE(C,21)) * 20) C),68);A4:EMA(C,10);A5:REF(C,2);A6:((SMA((M…

归并排序 自带时间复杂度测试

//时间复杂度 O(N*log2N) //稳定程度&#xff1a; 稳定 /* 确定分界点&#xff0c;中间位置 两端排序 归并&#xff0c;合二为一 */#include<iostream> #include<time.h> using namespace std; int tmp[250001]; void Sort(int List[], int l, int r);int main()…

python 图像变化检测_python hough变换检测直线的实现方法

1 原理2 检测步骤将参数空间(ρ,θ) 量化成m*n(m为ρ的等份数&#xff0c;n为θ的等份数)个单元&#xff0c;并设置累加器矩阵&#xff0c;初始值为0&#xff1b;对图像边界上的每一个点(x,y)带入ρxcosθysinθ&#xff0c;求得每个θ对应的ρ值&#xff0c;并在ρ和θ所对应的…

ruby elixir_如何使用Elixir和Phoenix快速入门构建CRUD REST API

ruby elixir这篇文章将展示如何使用Elixir和Phoenix框架构建REST API。 重点将是为持久化到Postgres数据库后端的模型提供CRUD&#xff08;创建&#xff0c;读取&#xff0c;更新&#xff0c;删除&#xff09;端点。 我应该警告你&#xff1b; 这是一个简单的例子。 但是&#…

LeetCode 07. 整数反转

原题描述 个人解法思路 class Solution { public:int reverse(int x) {int temp0;//需要返回的最后结果while(x!0){if(temp>INT_MAX/10 || temp<INT_MIN/10)return 0;temptemp*10x%10; //个位变十位 同理xx/10; //进行降位} return temp;} };

苹果开发者账号可以创建多少测试证书_ios苹果企业账号你所不知道的那些点

在2019年的时候苹果审核机制一下子就变得越来越严格了&#xff0c;现在我们想要通过苹果的官方网站去申请一个全新的ios苹果企业账户就是会非常的困难&#xff0c;很多公司有的也没有达到资格&#xff0c;ios开发商在申请苹果企业账号的时候&#xff0c;一方面需要像苹果提供大…

slf4j 记录日志文件_教程:正确的SLF4J日志记录用法以及如何检查它

slf4j 记录日志文件SLF4J是一个非常流行的日志记录外观&#xff0c;但是&#xff0c;就像我们使用的所有库一样&#xff0c;我们有可能以错误的方式或至少以一种非最佳方式使用它。 在本教程中&#xff0c;我们将列出常见的日志记录错误以及如何使用FindBugs检测到它们。 我们…

Leetcode 146. LRU 缓存机制

原题链接 题解&#xff1a;双链表哈希表 class LRUCache { public:struct Node {int key, val;Node *left, *right;Node(int _key, int _val): key(_key), val(_val), left(NULL), right(NULL) {}}*L, *R;unordered_map<int, Node*> hash;int n;void remove(Node* p) {…

Leetcode 28. 实现 strStr()

原题链接 解&#xff1a;KMP算法 class Solution { public:int strStr(string s, string p) {if (p.empty()) return 0;int n s.size(), m p.size();s s, p p;vector<int> next(m 1);for (int i 2, j 0; i < m; i ) {while (j && p[i] ! p[j …

jsf和jsp_带有JSF,Servlet和CDI的DynamicReports和JasperReports

jsf和jsp在此示例中&#xff0c;我将展示如何将DynamicReport和JasperReports与Servlet和CDI集成。 工具&#xff1a; TIBCO Jaspersoft Studio-6.0.4。最终版 Eclipse Luna服务版本2&#xff08;4.4.2&#xff09;。 WildFly 8.x应用程序服务器。 这是Eclipse上项目层次结…

接口隔离原则_设计模式的三大分类及六大原则

设计模式(Design pattern)代表了最佳的实践&#xff0c;通常被有经验的面向对象的软件开发人员所采用。设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。这些解决方案是众多软件开发人员经过相当长的一段时间的试验和错误总结出来的。设计模式分为三大类&…

Leetcode 24. 两两交换链表中的节点

原题链接 题解&#xff1a; 1.头部会改变创建虚拟头结点 2.前两个点定义为a,b&#xff0c;c 3.p指向b,a指向c,b指向a ; p指向本段最后一个结点。 class Solution { public:ListNode* swapPairs(ListNode* head) {auto dummy new ListNode(-1);dummy->next head;for (a…

spring aop不执行_使用Spring AOP重试方法执行

spring aop不执行我的一位博客关注者发送了一封电子邮件&#xff0c;要求我显示“ Spring AOP的RealWorld用法”示例。 他提到&#xff0c;在大多数示例中&#xff0c;都演示了Spring AOP在日志记录方法进入/退出或事务管理或安全性检查中的用法。 他想知道Spring AOP在“针对…

LeetCode 09. 回文数

原题链接 class Solution { public:bool isPalindrome(int x) {if(x<0)return false;if(x>0 && x<10)return true;long long temp 0;int xx x;while(x!0){int n x % 10;temp temp * 10 n;x /10;}if(temp xx)return true;else{return false;}} };