单元测试-xUnit
单元测试-xUnit
Assert常用方法
名称 | 描述 |
---|---|
Eqalexpected.result) |
断言结果与期望值相等。该方法的重载版本用于比较不同的类型和集合。该方法的另一种版本接受一个额外参数 该对象实现了用于比较对象的IEqualityComparer接口 |
NotEqual(expected,result) | 断言结果不等于期望值 |
True(result) | 断言结果为true |
False(result) | 断言结果为false |
IsType(expected,result) | 断言结果为指定类型 |
IsNotType(expected,result) | 断言结果不为指定类型 |
IsNull(result) | 断言结果为null |
IsNotNull(result) | 断言结果不为null |
InRange(result,low,high) | 断言结果介于low和high |
NotInRange(result,low,high) | 断言结果不介于low和high |
Throws(exception,expression) | 断言指定的表达式抛出指定的异常类型 |
客户需求:我要在首页看到所有在职的员工信息
快速构建一个MVC项目
1、在Models文件夹中添加Staff.cs实体类
public class Staff
{public int Id { get; set; }public string Name { get; set; }public string State { get; set; }public int Age { get; set; }public IEnumerable<Staff> GetAllStaff(){Staff[] staffs = new Staff[]{new Staff(){ Id = 1, Name = "张三", State = "在职", Age = 18 },new Staff(){ Id = 2, Name = "李四", State = "离职", Age = 20 },new Staff(){ Id = 10, Name = "王五", State = "在职", Age = 36 },new Staff(){ Id = 8, Name = "血友病", State = "在职", Age = 18 }};return staffs;}
}
2、HomeController中的Index方法内容:
public IActionResult Index()
{return View(new Staff().GetAllStaff().Where(x => x.State == "在职 "));
}
3、创建单元测试-xUnit
右键解决方案=>添加=>新建项目
找到xUnit测试项目:该项目的约定命名为 要测试的应用程序名加上.Tests
4、编写测试内容
修改UnitTest1.cs文件的名称,改为HomeControllerTests
在HomeControllerTests类中编写一个方法,该方法针对于Home控制器的Index方法
public void IndexActionModelIsComplete()
{//获取Home控制器var controll = new HomeController();//获取Home控制器Index方法的返回值var model = (controll.Index() as ViewResult).ViewData.Modelas IEnumerable<Staff>;//方法:预料值与实际值进行比较//参数1:你预料的理想状态值//参数2:实际上你代码返回的值Assert.Equal(new Staff().GetAllStaff().Where(x => x.State == "在职"),model);
}
在Assert.Equal中的两个参数如果是Int、string、bool这种类型的话可以直接进行比较
但是这里两个参数都是IEnumerable类型,进行比较的话,需要一定的逻辑,所以我们需要使用第三个参数来进行逻辑比较
然而第三个参数是IEqualityComparer (等式比较器) 类型,所以我们要使用实现了该接口的类
那么我们就定义一个类实现该接口
public class StaffComparer : IEqualityComparer<Staff>
{//预料值与实际值比较的逻辑在这个方法中写入public bool Equals(Staff x, Staff y){return x.Name == y.Name && x.State == y.State && x.Id == y.Id;}public int GetHashCode([DisallowNull] Staff obj){return obj.GetHashCode();}
}
之后在HomeControllerTests的IndexActionModelIsComplete方法修改Assert.Equal
Assert.Equal(new Staff().GetAllStaff().Where(x => x.State == "在职"),model,new StaffComparer()
);
5、进行测试
上方视图中找到测试资源管理器
执行测试
测试失败?什么原因呢?哦,原来是我们实际的值连一个都没有,那么我们就可以去Home控制器中的Index方法查找原因
原来是我们这里的判断多了一个空格,我们把空格删除再次进行测试
6、如果我们有很多种对象需要比较,那么逻辑该怎么办?
目前我们的逻辑比较只是针对于Staff对象,想多再次比较另外一个类型,我们又得创建一个类,再次编写逻辑,这样显得很笨重
那么我们进行一次升级,代码如下:
public class Comparer
{public static Comparer<B> Get<B>(Func<B, B, bool> func){//创建Comparer<T>类型return new Comparer<B>(func);}
}public class Comparer<T> : Comparer, IEqualityComparer<T>
{private Func<T, T, bool> func;//构造器public Comparer(Func<T, T, bool> func) => this.func = func;public bool Equals(T? x, T? y){return func(x, y);}public int GetHashCode([DisallowNull] T obj){return obj.GetHashCode();}
}
Assert.Equal更改:
Assert.Equal(new Staff().GetAllStaff().Where(x => x.State == "在职"),model,Comparer.Get<Staff>((a, b) => a.Name == b.Name && a.State == b.State && a.Id == b.Id)
);
单元测试-xUnit相关推荐
- C#/.net 单元测试xUnit、Mock、Moq
C#/.net 单元测试xUnit.Mock.Moq 在做单元测试的时候,有时需要引用很多的外部对象,例如网络通信.记录日志等.单元测试无法控制这些外部的依赖对象,所以需要使用Stub和Mock来模拟 ...
- 详谈单元测试-xUnit
简介 xUnit.net 是针对 .NET 的免费,开源单元测试框架,可并行测试.数据驱动测试.测试项目需引用被测试项目,从而对其进行测试,测试项目同时需要引用 xUnit.测试编写完成后,用 Tes ...
- .net、C#单元测试xUnit
xUnit单元测试 测试的分类 单元测试:对某个类或者某个方法进行测试 集成测试:可使用Web资源.数据库数据进行测试 皮下测试:在Web中对controller下的节点测试 UI测试:对界面的功能进 ...
- 单元测试xUnit学习
为什么要做自动化测试 可以频繁的进行测试 可以在任何时候进行测试,也可以按计划定时测试 比人工测试快 快速发现错误 可靠 测试代码与生产代码紧密结合 代码规范 自动化测试的分类 单元测试:可以测试某个 ...
- 单元测试-xUnit总结
xUnit总结 什么是xUnit xUnit.net是针对.NET Framework的免费,开源,以社区为中心的单元测试工具. 自动化测试的优点 可以频繁的进行测试 可以在任何时间进行测试,也可以按 ...
- 单元测试中Assert详解-xUnit
前一篇:详谈单元测试-xUnit 简介 Assert 是基于代码的返回值.对象的最终状态.事件是否发生等情况来评估测试的结果.Assert 的结果可能是 Pass 或者 Fail.如果所有的 Asse ...
- Xunit.net 单元测试学习——按顺序测试
最近一直在提高编码的质量,为了保证质量,必须有一套趁手的兵器,Xunit.Net 就是如此霸气的利器. 怎么编写单元测试 怎么会有如此低级的疑问呢?因为从接触单元测试,到使用上,真的不是一个简单的心路 ...
- 使用 Visual Studio 2005 Team System 进行单元测试并生成用于 Unit Test Framework 的源代码...
PS:微软专家写的一往篇VSTS2005测试功能说明,非常详细.适合初学者查看. 适用于: Microsoft Visual Studio 2005 Team System Beta 2 Team A ...
- .NET 测试框架 xUnit,MSTest, Specflow 使用经验汇总
目录 前言 单元测试 单元测试就是对程序给定输入,判断输出是否满足预期 不是所有的代码都能编写单元测试 EF 单元测试 xUnit和MSTest Specflow 前言 xUnit和MSTest同属于 ...
最新文章
- php 易语言md5加密解密,详解易语言调用js实现md5加密方法
- iOS开发网络篇—Reachability检测网络状态
- 优化反射性能的总结(上)
- net core 3.1 跨域 Cors 找不到 “Access-Control-Allow-Origin”
- Dubbo源码分析系列-Dubbo的动态编译原理
- react-native修改android包名-上传应用市场
- 啦啦外卖40.7 APP小程序三端 独立开源版本
- 计算机无法同步,win7系统电脑无法同步时间的解决方法
- c语言中max的用法。
- linux编译n2n v2,在centos下安装n2n服务器
- 配置与管理Ubuntu 21.10
- 【风马一族_Python】 决策树
- 共享充电宝的优点有哪些
- 头文件里应该写些什么
- echarts实现中国地图,山西地图,图表面积图配置项
- Pytorch系列(四):猫狗大战1-训练和测试自己的数据集
- gitpage镜像网站自定义域名及优化
- 计算机技术流浪地球,科幻圈观察:《流浪地球》原著作者刘慈欣:计算机技术是个坑!...
- iMX6ULL 软件定制应用笔记 -9个知识点讲解
- 浅谈2017棋牌游戏的前景 运营 推广(上) 转贴