用NSubstitute来mock

Moq在.net中比较出名的mock框架,NSubstitute也是属于这类框架,使用方式也如出一辙,是通过实现子类来达到mock的效果。下面的测试方法都是按照 UnitTest的三板斧Arrange Act Assert来展开的,代码具体如下。

using Microsoft.VisualBasic;
using NSubstitute;
using NSubstitute.ExceptionExtensions;
using System;
using System.Threading.Tasks;
using Xunit;namespace NSubstituteUnitTest
{public class UserManageUnitTest{IUserService _userService;UserManage _userManage;public UserManageUnitTest(){//mock接口_userService = Substitute.For<IUserService>();_userManage = new UserManage(_userService);}[Fact]public async Task AddUser_Default_Return(){var user = new User { UserName = "a", Password = "b" };//mock方法的返回值_userService.AddUserAsync(Arg.Any<User>()).Returns(true);          var result = await _userManage.AddUserAsync(user);Assert.Equal(true, result);}[Fact]public async Task AddUser_ServiceError_ReturnFalse(){          var user = new User { UserName = "a", Password = "b" };//mock方法的返回值_userService.AddUserAsync(Arg.Any<User>()).Returns(false);          var result = await _userManage.AddUserAsync(user);Assert.Equal(false, result);}[Fact]public async Task AddUser_Exception_ReturnFalse(){         var user = new User { UserName = "a", Password = "b" };//mock方法发生异常_userService.AddUserAsync(Arg.Any<User>()).Throws(new Exception("异常"));       var result = await _userManage.AddUserAsync(user);Assert.Equal(false, result);}[Theory][InlineData("", "a")][InlineData("a", "")][InlineData("", "")][InlineData(null, "a")][InlineData("a", null)][InlineData(null, null)][InlineData(" ", "a")][InlineData("a", " ")][InlineData(" ", " ")]public async Task AddUser_IsNullOrEmpty_ReturnFalse(string userName, string password){//这个逻辑没有设用到接口,所以不需要mockvar user = new User { UserName = userName, Password = password }; var result = await _userManage.AddUserAsync(user);Assert.Equal(false, result);}}//被测试的类public class UserManage{private readonly IUserService _userService;public UserManage(IUserService userService){_userService = userService;}public async Task<bool> AddUserAsync(User user){try{if (!string.IsNullOrEmpty(user.UserName.Trim()) && !string.IsNullOrEmpty(user.Password.Trim())){return await _userService.AddUserAsync(user);}else{return false;}}catch{return false;}}}//接口public interface IUserService{Task<bool> AddUserAsync(User user);}//实体public class User{public string UserName { get; set; }public string Password { get; set; }}
}

单元测试结果

覆盖率结果

更复杂的调用参看官方文档:https://nsubstitute.github.io/help/getting-started/

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

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

相关文章

ubuntu安装mysql_Ubuntu18.04下安装MySQL

提示&#xff1a;以下操作均在root用户下进行&#xff0c;如在普通用户&#xff0c;请自行加上sudo&#xff01;# 查看有没有安装MySQL&#xff1a;dpkg -l | grep mysql# 安装MySQL&#xff1a;apt install mysql-server安装完成之后可以使用如下命令来检查是否安装成功&#…

居家好物┃超好用的擦窗神器保护腰椎尾椎久坐不累的美臀坐垫

▲卢sir特别推荐点击上图进入玩酷屋春节即将来临&#xff0c;小木特地挑选了好几款超级好用的居家生活产品。第一款&#xff1a;擦外窗神器&#xff0c; 颠覆你擦窗方式&#xff01;双面长柄 可伸缩 可折叠 可旋转便携擦玻璃神器第二款&#xff1a;天然抗菌除螨毛巾&#xff0c…

【读书笔记】《编写高效的JavaScript程序》

为什么80%的码农都做不了架构师&#xff1f;>>> 看到一篇文章&#xff0c;http://www.csdn.net/article/2012-11-20/2811887-writing-fast-memory-efficient-javascript/2 里面有个网页针对 原型链&#xff0c;模块化&#xff0c;模块化加缓存&#xff0c;进行了比…

Cloudera将被私有化,Hadoop时代或将落幕

北京时间 6 月 1 日晚&#xff0c;据 TechCrunch 报道 [1]&#xff0c;KKR 和 CD&R 将以 53 亿美元收购 Cloudera&#xff0c;Cloudera 将被私有化。截止到本文发稿时&#xff08;11 点 49 分&#xff09;&#xff0c;Cloudera 股票报价 15.94 美元&#xff0c;涨幅 23.95%…

mysql group_concat去重_MySQL group_concat() 函数用法

MySQL group_concat() 函数用法在使用 group by对数据进行分组后&#xff0c;如果需要对 select 的数据项进行字符串拼接&#xff0c;这时就需要用到group_concat()函数。1、基本用法group_concat()完整语法如下&#xff1a;group_concat([DISTINCT] 要连接的字段 [Order BY AS…

请问:如何写出没有BUG的代码?

全世界只有3.14 % 的人关注了数据与算法之美1947年9月9日&#xff0c;美国海军准将 Grace Hopper 在哈佛学院计算机实验室里使用 Mark II 和 Mark III 计算机进行研究工作。她的团队跟踪到 Mark II 上的一个错误&#xff0c;操作人员发现是由于一只飞蛾钻到了 Mark II 的继电器…

非常适合新手的redis cluster搭建过程

Redis集群演进过程Redis单节点主从复制&#xff1a;复制主要实现了数据的多机备份&#xff0c;以及对于读操作的负载均衡和简单的故障恢复。故障恢复无法自动化&#xff1b;写操作无法负载均衡&#xff1b;存储能力受到单机的限制。哨兵&#xff08;Sentinel&#xff09;&#…

各类环境渗透测试简述

2019独角兽企业重金招聘Python工程师标准>>> 各类环境渗透测试简述 一、渗透测试概念 渗透测试 (penetration test)并没有一个标准的定义&#xff0c;国外一些安全组织达成共识的通用说法是&#xff1a;渗透测试是通过模拟恶意黑客的攻击方法&#xff0c;来评估计算…

预售┃一张纸一幅图,竟然提高了10倍的学习和工作效率!?

▲卢sir特别推荐点击上图进入玩酷屋人类大脑的容量远远超出一般人的想象&#xff0c;时到21世纪的今天&#xff0c;我们对大脑的运用远远不够。大脑机能的使用率基于我们的思维模式&#xff0c;而思维导图正是开发大脑中最有效的利器&#xff01;之前小木给大家推荐了一套基于少…

入门K8s:一键脚本搭建Linux服务器集群

前言好久没有写系列博客了&#xff0c;本文主要是对网上文章的总结篇&#xff0c;主要是将安装和运行代码做了一次真机实验&#xff0c;亲测可用。文章内包含的脚本和代码&#xff0c;多来自于网络&#xff0c;也有我自己的调整和配置&#xff0c;文章末尾对参考的文献做了列举…

数据库系统原理及mysql应用教程第二版_数据库系统原理及MySQL应用教程(第2版十三五普通高等教育规划教材)...

导语内容提要本书共19章&#xff0c;全面地讲述了数据库技术的基本原理和应用。主要内容包括&#xff1a;数据库概述、信息与数据模型、关系代数与关系数据库理论、数据库设计方法、MySQL的安装与使用、MySQL存储引擎与数据库操作管理、MySQL表定义与完整性约束控制、MySQL数据…

Eclipse 安装配置总结(WST WTP)(转)

为什么80%的码农都做不了架构师&#xff1f;>>> Eclipse 安装配置总结(WST WTP)(转) Eclipse 是最流行的功能强大的java IDE&#xff0c;有丰富的插件&#xff0c;配合插件可以作为j2ee、c、c、.net等开发工具。需要安装插件才能支持Web开发和其他应用的开发&#…

2019最佳年会,新东方6名员工冒着离职的风险,在年会上怒怼老板

全世界只有3.14 % 的人关注了数据与算法之美今天早上&#xff0c;数据汪打开微信朋友圈一看&#xff0c;发现大家都在疯传昨晚北京新东方学校年会节目《释放自我》。新东方员工们把歌曲《沙漠骆驼》的歌词给改编过后&#xff0c;把许多奋战在一线的员工心声都给唱出来了&#x…

mysql列增减_Mysql基本操作——增减改查

1 创建数据库&#xff1a;两种方法&#xff1a;create database my_db;createdatabase if not exists my_db;2 删除数据库&#xff1a;两种方法&#xff1a;drop databasemy_db;drop database if exists my_db;3 创建表&#xff1a;createtable table_name (column_name column…

使用mysql-proxy 快速实现mysql 集群 读写分离

为什么80%的码农都做不了架构师&#xff1f;>>> 使用mysql-proxy 快速实现mysql 集群 读写分离 目前较为常见的mysql读写分离分为两种&#xff1a; 1、 基于程序代码内部实现&#xff1a;在代码中对select操作分发到从库&#xff1b;其它操作由主库执行&#xff1…

50万年薪程序员,被百万网民怒喷后,却迎来大撕逼

全世界只有3.14 % 的人关注了数据与算法之美前几天&#xff0c;我们年轻气盛的小卢写了一篇关于“程序员锁库跑路&#xff0c;最终致创业公司倒闭”的文章&#xff0c;语言有些偏激&#xff0c;数据汪在此替小卢给大伙道个歉&#xff0c;至于为何不让他本人来呢&#xff1f;因为…

.NET轻量级配置中心AgileConfig

描述基于NetCore开发的轻量级配置中心&#xff0c;部署简单、配置简单&#xff0c;使用简单&#xff0c;可以根据个人或者公司需求采用。部署简答&#xff0c;最少只需要一个数据节点&#xff0c;支持docker部署支持多节点分布式部署来保证高可用配置支持按照应用隔离&#xff…

人生苦短,我用Python!

在大数据时代&#xff0c;信息更新非常快速&#xff0c;计算机语言也犹如雨后春笋般被我们所熟知。C语言、C、Java等可谓是各领风骚、独占鳌头&#xff0c;而Python则是一门近几年崛起很快也很火的编程语言。虽说编程语言难分好坏&#xff0c;各有千秋。但Python到底有什么魔力…

预售┃没有标题,配得上这款“俄罗斯方块”

▲数据汪特别推荐点击上图进入玩酷屋在之前的文章时&#xff0c;马斯提到数学存在一种现象叫“梯次掉队”&#xff0c;原因在于孩子的数学思维地基没有打牢。&#xff08;传送门&#xff09;提到初中孩子需要空间想象能力时&#xff0c;很多父母疑惑为何需要&#xff1f;关于这…

读Getting Started With Windows PowerShell笔记

使用中Powershell的操作跟Linux中的终端操作很多地方是一致的&#xff0c;当然&#xff0c;还是有着Windows自己的特色&#xff0c;比如&#xff0c;不分大小写。之前命令行中的命令大部分在这里也可以用&#xff0c;而且用法一样。选中后点右键&#xff0c;即复制到剪切板。不…