使用Moq、NUnit和Shoulded进行单元测试
目录
介绍
背景
使用代码
具有保存的输入参数和输出的单元测试复杂函数
- 下载源2.3 MB
介绍
如今,当应用程序变得越来越复杂时,开发人员很难在创建或编辑功能时检查所有方案。因此,必须有一个单独的单元测试项目,以确保满足所有所需的功能参数并且不会遗漏任何内容。为此,有时会模拟数据,并应用条件断言来验证功能需求。这篇文章将告诉你如何使用Moq,NUnit 和Shouldly在.NET应用程序中实现单元测试。
背景
NUnit已经存在了很长时间,但是某些关键功能必须是缺少的,即数据模拟,其中来自一些外部功能的响应将使用Moq来模拟,以测试给定的功能和Shouldly ,使断言更容易理解和更有意义。
Moq和Shouldly都提供了NuGet包。
使用代码
为了说明如何模拟功能,Moq用于设置给定功能以根据某些条件返回预定义的响应。
Shouldly提供现成的包装器功能以断言可接受的条件。
[Test]
public void TestGetRailwayStationById()
{var mockClassBll = new Mock<IBll>();mockClassBll.Setup(c => c.GetRailwayStationById(It.IsAny<int>())).Returns(new RailwayStationDs(1, "New Delhi"));var objRailwayStation = new RailwayStation(mockClassBll.Object);var result = objRailwayStation.GetRailwayStationById(1);result.ShouldNotBeNull();result.StationName.ShouldNotBeEmpty();
}[Test]
public void TestGetRailwayStationByString()
{var mockClassBll = new Mock<IBll>();mockClassBll.Setup(c => c.GetRailwayStationByName(It.IsAny<string>())).Returns(new RailwayStationDs(1, "New Delhi"));var objRailwayStation = new RailwayStation(mockClassBll.Object);var result = objRailwayStation.GetRailwayStationByName("New Delhi");result.ShouldNotBeNull();result.StationId.ShouldBeGreaterThan(0);
}
具有保存的输入参数和输出的单元测试复杂函数
在应用程序中,很少有非常复杂的函数会根据其中的许多情况返回不同的结果,因此很难检查所有这些情况,因此,对这些函数进行单元测试的最佳方法是保存所有输入参数及其期望输出值。这样的测试数据可以保存在数据库中或XML文件中,并且可以在单元测试中一次又一次地使用以验证所有情况。此类测试数据最适合于在编辑此类复杂功能并且不知不觉中一个或多个案例的功能发生更改并返回错误结果的情况下的条件。
[TestMethod]
[DataSource("System.Data.SqlClient",
@"Data Source=SAURABH\ADVANCE;Initial Catalog=TestDB;
Integrated Security=True", "dbo.StatusTestData",
DataAccessMethod.Sequential)]
public void TestStatusDataDrivenSQL()
{TestContext.ShouldNotBeNull();var strTime = TestContext.DataRow["Time"].ToString();var varTime = TimeSpan.Parse(strTime);var varStatus = TestContext.DataRow["Status"].ToString();var objBll = new ClassBLL1();var result = objBll.CurrentStatus(varTime);result.ShouldNotBeNullOrEmpty();result.ShouldBe(varStatus);
}[TestMethod]
[DeploymentItem(".\\UnitTestBLL\\XMLTestCases.xml")]
[DataSource("Microsoft.VisualStudio.TestTools.DataSource.XML",
@"XMLTestCases.xml", "case", DataAccessMethod.Sequential)]
public void TestStatusDataDrivenXML()
{TestContext.ShouldNotBeNull();var strTime = TestContext.DataRow["Time"].ToString();var varTime = TimeSpan.Parse(strTime);var varStatus = TestContext.DataRow["Status"].ToString();var objBll = new ClassBLL1();var result = objBll.CurrentStatus(varTime);result.ShouldNotBeNullOrEmpty();result.ShouldBe(varStatus);
}
使用Moq、NUnit和Shoulded进行单元测试相关推荐
- NUnit Test Adapter (单元测试)
阅读目录 什么是单元测试? 为什么使用单元测试? NUint使用详解: 示例 属性 断言 简单测试 VS配置: External Tools Visual Nunit 2010 NUnit Test ...
- nunit测试报告 转html,单元测试软件NUNIT使用说明
本文仅提供了public 方法的说明.及前期工作和常用的断言和attribute. NUNIT使用说明 一:软件及安装 免费,开源的单元测试软件. 安装只要运行安装程序,按所有缺省设置即可. NUNI ...
- 【MVC 4】4.MVC 基本工具(Visual Studio 的单元测试、使用Moq)
作者:[美]Adam Freeman 来源:<精通ASP.NET MVC 4> 3.Visual Studio 的单元测试 有很多.NET单元测试包,其中很多是开源和免费的.本 ...
- 使用Moq实现单元测试
先开个头,当我们对A进行单元测试时,可能会发现A的实现必须要依赖B.这时,我们在写单元测试时,就必须先创建B的实例,然后把B传给A再建立A的实例进行测试. 这样就会出现一些问题: 1.我们的单元测试会 ...
- 前后端分离开发模式下后端质量的保证 —— 单元测试
概述 在今天, 前后端分离已经是首选的一个开发模式.这对于后端团队来说其实是一个好消息,减轻任务并且更专注.在测试方面,就更加依赖于单元测试对于API以及后端业务逻辑的较验.当然单元测试并非在前后端分 ...
- ultraedit 运行的是试用模式_单元测试 —— 前后端分离开发模式下后端质量的保证...
概述 在今天, 前后端分离已经是首选的一个开发模式.这对于后端团队来说其实是一个好消息,减轻任务并且更专注.在测试方面,就更加依赖于单元测试对于API以及后端业务逻辑的较验.当然单元测试并非在前后端分 ...
- 作业 20180925-4 单元测试,结对
此作业的要求参见:https://edu.cnblogs.com/campus/nenu/2018fall/homework/2146 结对伙伴:付佳 测试框架:NUnit 测试内容:本周作业 201 ...
- 基于.NET平台常用的框架整理(转)
分布式缓存框架: Microsoft Velocity:微软自家分布式缓存服务框架. Memcahed:一套分布式的高速缓存系统,目前被许多网站使用以提升网站的访问速度. Redis:是一个高性能的K ...
- .NET平台常用的开发组件
工欲善其事,必先利其器.学习.NET也10年有余,其优雅的编程风格,高效率的开发速度,极度简单的可扩展性,足够强大开发类库,较小的学习曲线,让我对这个平台产生了浓厚的兴趣,在工作和学习中也积累了一些开 ...
最新文章
- golang 函数定义
- DTS和PTS的解释(FFMPEG、HLS相关)
- 15、修改和删除触发器(DROP TRIGGER)
- STL 整理(map、set、vector、list、stack、queue、deque、priority_queue)
- 验证回文串Python解法
- c mysql web开发实例教程_java web 开发入门实例
- linux rpm安装软件笔记
- a标签的onclick事件_JavaScript提高:ASP.NET使用easyUI TABS标签显示问题
- Oracle读书笔记
- matlab coder 安装,MATLAB Coder
- python微博评论情感分析_用python对鹿晗、关晓彤微博进行情感分析
- 3dmax顶点动画导入unity_从3dmax如何导入物体到unity3d
- 如何运营一个微信公众号
- 【2019年04月04日】股市指数估值排名
- vue中使用Vue-i18n插件实现页面中英文切换详细教程
- Microsoft IExpress:微软自带的安装程序包制作工具
- No resource found that matches the given name ‘android.TextAppearance.Materia...
- 马斯克身家超马云,网友:看完他的履历后一点也不惊讶
- Eclipse入门教程
- 用c语言输出一个月的月历
热门文章
- android 抓取webview中的所有图片_Python|任意网页中的所有图片下载
- php区链接,PHP读取某站点的链接的函数的方法
- appium java 时间控件_在 Appium 中快速单击控件的变通方法
- python一个函数调用另一个函数的返回值_python-调用另一个函数后立即从函数返回...
- 潮流色彩碰撞C4D几何空间!这样的艺术背景素材,设计师都喜欢
- 好用的书法字体素材,可以用于各种项目;从商标和品牌到邀请、海报等
- 电商无线页面设计手机移动端的设计模板
- 设计图书馆oracle触发器,Oracle触发器开发与设计
- php的冒泡排序的意思,冒泡排序是什么意思
- Ubuntu的一些命令