单元测试 | 如何在Mock时匹配匿名类型参数

前言

假设,我们需要单元测试如下方法:

public User GetUser(int id)
{return Repository.Query<User>(new { ID = id }).FirstOrDefault();
}

而对于Repository.Query,我们需要进行Mock。

怎么实现?

不匹配具体参数值

如果我们不关心参数的具体值,可以简单地让它匹配任何object:

mockRepo.Setup(t => t.Query(It.IsAny<object>())).Returns(user);

但是,如果要验证具体参数值时,下列方法无法工作:

mockRepo.Setup(t => t.Query(new { ID = 1 })).Returns(user);

因为单元测试和实际执行生成的匿名类型分别位于不同的Assembly,不能匹配。

Json序列化

把对象序列化成字符串,比如JSON,利用字符串比较进行匹配:

mockRepo.Setup(t => t.Query(It.Is<object>(o => ToJson(o)==ToJson(new { ID = 1 })))).Returns(user);

但是,这种方式不适合多个参数的情况:

new { Name = "My IO", Age = 1 }

一旦改变属性声明的顺序,序列化匹配就会失效。

反射

反射匿名类型取出对应属性的值:

mockRepo.Setup(t => t.Query(It.Is<object>(o => (int)o.GetType().GetProperty("ID").GetValue(o) == 1))).Returns(user);

这种方式能够实现完全灵活地进行比较,以确定参数是否匹配。但如果有多个属性要匹配,则非常繁琐。

结论

在本文中,我们提供了3种方式,在Mock时匹配匿名类型参数。

如果你觉得这篇文章对你有所启发,请关注我的个人公众号”My IO“

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

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

相关文章

java中imp结尾,imp java

适配器模式之桥梁模式设计模式目录 http://blog.csdn.net/fenglailea/article/details/52733435风.fox桥梁模式 Bridge Pattern将抽象和实现解耦&#xff0c;使得两者可以独立地变化通用类图组成抽象化角色 Abstraction...文章风来了2016-10-06972浏览量expOracle数据导入导出i…

Cookies

一&#xff0c;前言 Cookies想必所有人都了解&#xff0c; 但是未必所有人都精通。本文讲解了Cookies的各方面知识。 二&#xff0c;基础知识 1.什么是Cookies Cookie 是一小段文本信息&#xff0c;伴随着用户请求和页面在 Web 服务器和浏览器之间传递。Cookie 包含每次用户访问…

用字符串表达式访问JSON数据(java,fastjson)

2019独角兽企业重金招聘Python工程师标准>>> //单元科技-www.ccell.com.cn 技术部,开源 //XML数据有XPATH 如"root/rows[id1]/name" //在JS中JSON数据可以对象方式访问 //java中怎么 用字符串表达式访问JSON数据? 找了很久没有找到,自己写一个,以减小代…

C语言学习

时间&#xff1a;20160302 (1) C语言中&#xff0c;很多标准头文件&#xff0c;这样的头文件好处在于&#xff0c;所有的实现方法都在头文件中进行定义&#xff0c;后期对方法进行修改时&#xff0c;可以只需要改动头文件&#xff0c;就可以了&#xff0c;其他的地方也需要对应…

怎样分辨谁才是朋友圈里的真·贵族?

不是我不明白&#xff0c;这世界变化快但在这个看1分钟视频都要2倍速的世界里有一群人却仍然愿意每天花5分钟阅读2000字以上的文字信息这是多么高贵的一种精神所以高贵的你&#xff0c;值得更好的内容今天我们精选出8个优质公号他们有趣有料、有思想有温度绝对值得你的关注长按…

Android之如何解决Android studio运行出现的HAX kernel modules is not installed

HAX kernel modules is not installed 很久之前,我安装了Android studio,运行时控制台打印出这个,emulator:ERROR:x86 emulation currently requires hardware acceleration! Please ensure Intel HAXM is properly installed and useble, CPU acceleration statis:HAX kern…

Elastic AMP监控.NET程序性能

什么是Elastic AMPElastic APM 是一个应用程序性能监控系统。它可以请求的响应时间、数据库查询、对缓存的调用、外部 HTTP 请求等的详细性能信息&#xff0c;可以实时监控软件服务和应用程序。这可以帮助我们快速查明和修复性能问题。Elastic APM 还会自动收集未处理的错误和异…

java分页的工具类,java分页工具类

PageBean-分页package com.soyea.util;import java.io.Serializable;import java.util.List;/*** 分页工具类*/public class PageBean implements Serializable {private static final long serialVersionUID -8741766802354222579L;private int pageSize5; // 每页显示多少条…

xxx定律-poj-3782

xxx定律 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 1639 Accepted Submission(s): 1303 Problem Description 对于一个数n&#xff0c;如果是偶数&#xff0c;就把n砍掉一半&#xff1b;如果是奇数&#x…

asp.net 检测访问者是iphone,android,web(摘录)

aps.net 可以使用WebFormViewEngine来实现。 参考文章&#xff1a;http://www.hanselman.com/blog/MixMobileWebSitesWithASPNETMVCAndTheMobileBrowserDefinitionFile.aspx 源代码 C#代码 public class MobileCapableWebFormViewEngine : WebFormViewEngine { public…

在Android NDK中使用OpenSSL

从 6.0 开始&#xff0c;Google 要求不要使用系统的 OpenSSL&#xff0c;请见&#xff1a;https://developer.android.com...。因此&#xff0c;请不要再使用本文介绍的方法&#xff0c;请自行交叉编译 OpenSSL 或者使用别人编译好的版本。2017年3月注 由于Java较为容易被反编译…

字符串之数字子串求和

题目:给定一个字符串str,求其中全部数字串所代表的数字之和 要求: 1、忽略小数点字符,例如“A1.3”,其中包括2个数字1和3 2、如果是紧贴数字子串的左侧出现字符“-”,当连续出现的数量为奇数时,则数字视为负,连续出现的数量为偶数的则 数字视为正,例如,“A-1…

买的情侣裤衩寄前男友家了,怎么办?

1 那你是要和别人一起去吗&#xff01;▼2 我马上想到我一老师了&#xff01;&#xff08;素材来源网络&#xff0c;侵删&#xff09;▼3 当代父母对孩子的期望变化&#xff08;素材来源网络&#xff0c;侵删&#xff09;▼4 这个小象打破我的观念&#xff1f;▼5 小个子买…

ctf php sql注入,CTF—攻防练习之HTTP—SQL注入(SSI注入)

主机&#xff1a;192.168.32.152靶机&#xff1a;192.168.32.161ssI是赋予html静态页面的动态效果&#xff0c;通过ssi执行命令&#xff0c;返回对应的结果&#xff0c;若在网站目录中发现了.stm .shtm .shtml等&#xff0c;且对应SSL输入没有过滤该网站可能存在SSI注入漏洞ssi…

OAuth 2.1 带来了哪些变化

OAuth 2.1 是 OAuth 2.0 的下一个版本, OAuth 2.1 根据最佳安全实践(BCP), 目前是第18个版本&#xff0c;对 OAuth 2.0 协议进行整合和精简, 移除不安全的授权流程, 并发布了 OAuth 2.1 规范草案, 下面列出了和 OAuth 2.0 相比的主要区别。⚡ 推荐使用 Authorization Code PKC…

转仁兄:Binary search and its variation

http://fihopzz.blogspot.com/2013/07/enter-post-title-here-binary-search-and.html转载于:https://www.cnblogs.com/kwill/p/3230655.html

生孩子要趁早 3

说到猝死&#xff0c;前两天又有报道说哪个搞IT的年纪轻轻的嗝儿屁了&#xff1b;我想&#xff1a;其实哪个行业都有这么几个倒霉孩子&#xff1b;这也就是搞网络报道的公司的身边的事儿&#xff0c;才被程序员们通过网络转来转去&#xff1b;那些搬砖、运煤的就没有年纪轻轻累…

使用OClint进行iOS项目的静态代码扫描

使用OClint进行iOS项目的静态代码扫描 原文链接&#xff1a;http://blog.yourtion.com/static-code-analysis-ios-using-oclint.html 最近需要一个静态分析代码工具&#xff0c;帮助我们发布运行应用前找到代码潜在的问题。 其实对于iOS开发&#xff0c;我们的日常开发上已经用…

Linux命令常用大全

系统信息 arch 显示机器的处理器架构(1) uname -m 显示机器的处理器架构(2) uname -r 显示正在使用的内核版本 dmidecode -q 显示硬件系统部件 - (SMBIOS / DMI) hdparm -i /dev/hda 罗列一个磁盘的架构特性 hdparm -tT /dev/sda 在磁盘上执行测试性读取操作 cat /proc/cpuinfo…

54个站在人类智商巅峰的男人!告诉你2400年的物理学史里都有什么……

全世界只有3.14 % 的人关注了爆炸吧知识一沙见世界 一花窥天堂手心握无限 须臾纳永恒杨振宁曾说读上面的四句诗可以感受到物理的美但物理的美不至于此物理还有一种庄严美一种神秘美一种初窥宇宙奥秘的畏惧美物理就是如此的迷人任何语言在它的面前都很贫瘠数学让人摆脱了愚昧而…