.NET Core单元测试的两种方法介绍

应用程序测试的类型很多,包括集成测试,Web 测试,负载测试等。在最底层的是单元测试,此测试可以测试单个软件组件或方法。单元测试一般只测试开发人员的代码,不应该测试基础结构普、问题,如数据库,文件系统或网络资源等。单元测试可以使用测试驱动开发(TDD)编写,也可以将它们添加到现有代码已确认其正确性。

在编写单元测试时,注意不要随意地在基础结构上引入依赖项。这些依赖项往往使测试更慢,更脆弱,因此应该将其保留用于继承测试。可以通过遵循显示依赖性原则,使用依赖注入从框架请求依赖关系,以此来避免应用程序代码中地这些隐藏依赖关系。

1.xUnit.net 单元测试

创建一个 .net core 类库项目,创建一个用于测试的方法:

public class UnitTest
    {
        public bool IsNum(string obj)
        {
            var i = 0;
            return int.TryParse(obj, out i);
        }
    }

然后添加 xUnit 测试项目:

创建测试成功和测试失败的方法:

public class UnitTest1
    {
        private UnitTest myTest;
        public UnitTest1()
        {
            myTest = new UnitTest();
        }
        [Fact]
        public void TestSuccess()
        {
            Assert.True(myTest.IsNum("1"));
        }

        [Fact]
        public void TestFail()
        {
            Assert.True(myTest.IsNum("q"));
        }
    }

[Fact] 特性将方法表示为单个测试。

在 VS 工具栏中选择 测试-- 运行 -- 所有测试,显示一个成功,一个失败:

也可以使用[Theory] 特性执行相同的代码,但具有不同输入参数的测试,使用[InlineData] 特性来指定这些输入的参数:

        [Theory]
        [InlineData("-1")]
        [InlineData("0")]
        public void Test(string str)
        {
            Assert.True(myTest.IsNum(str));
        }

2.MSTest 单元测试

xUnit 使跨平台的良好选择,在面向 Windows 时,MSTest 是一个更好的选择,因为是官方提供的支持。

创建 MSTest 测试项目,同样添加测试成功和失败的方法,在方法上添加 [TestMethod] 特性,并在类上添加特性 [TestClass]:

    [TestClass]
    public class UnitTest1
    {
        private UnitTest myTest;
        public UnitTest1()
        {
            myTest = new UnitTest();
        }
        [TestMethod]
        public void TestSuccess()
        {
            Assert.IsTrue(myTest.IsNum("1"));
        }

        [TestMethod]
        public void TestFail()
        {
            Assert.IsTrue(myTest.IsNum("q"));
        }
    }

到此这篇关于.NET Core单元测试的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • ASP.NET Core针对一个使用HttpClient对象的类编写单元测试详解

    介绍 几年前,微软引入了HttpClient类来替代HttpWebRequest来发送Web请求.这个新的类更易于使用,更加简洁,更具有异步性,且易于扩展. HttpClient类有一个可以接受HttpMessageHandler类对象的构造函数.HttpMessageHandler类对象可以接受一个请求(HttpRequestMessage), 并返回响应(HttpResponseMessage).它的功能完全取决于它的实现.默认情况下HttpClient使用的是HttpClientHandl

  • ASP.NET Core项目使用xUnit进行单元测试

    目录 一.前言 二.创建示例项目 1.UnitTest.Model 2.UnitTest.Data 3.UnitTest.IRepository 4.UnitTest.Repository 5.UnitTestDemo 6.TestDemo 三.编写单元测试 1.运行单元测试 2.调试单元测试 一.前言 在以前的.NET Framework项目中,我们也写过一些单元测试的项目,而在ASP.NET Core 这种Web或者API应用程序中要做单元测试是很方便的. 这篇文章主要讲解如何使用xUnit

  • xUnit 编写 ASP.NET Core 单元测试的方法

    还记得 .NET Framework 的 ASP.NET WebForm 吗?那个年代如果要在 Web 层做单元测试简直就是灾难啊..NET Core 吸取教训,在设计上考虑到了可测试性,就连 ASP.NET Core 这种 Web 或 API 应用要做单元测试也是很方便的.其中面向接口和依赖注入在这方面起到了非常重要的作用. 本文就来手把手教你如何用 xUnit 对 ASP.NET Core 应用做单元测试..NET Core 常用的测试工具还有 NUnit 和 MSTest,我本人习惯用 x

  • ASP.NET Core对Controller进行单元测试的完整步骤

    前言 单元测试对我们的代码质量非常重要.很多同学都会对业务逻辑或者工具方法写测试用例,但是往往忽略了对Controller层写单元测试.我所在的公司没见过一个对Controller写过测试的.今天来演示下如果对Controller进行单元测试.以下内容默认您对单元测试有所了解,比如如何mock一个接口.在这里多叨叨一句,面向接口的好处,除了能够快速的替换实现类(其实大部分接口不会有多个实现),最大的好处就是可以进行mock,可以进行单元测试. 测试Action 下面的Action非常简单,非常常

  • ASP.NET Core中使用xUnit进行单元测试

    单元测试的功能自从MVC的第一个版本诞生的时候,就是作为一个重要的卖点来介绍的,通常在拿MVC与webform比较的时候,单元测试就是必杀底牌,把webform碾压得一无是处. 单元测试的重要性不用多说了,有单元测试的做兜底的项目,好比给开发人员买了份保险,当然这个保险的质量取决于单元测试的质量,那些一路Mock的单元测试,看起来很美,但是什么都cover不到.目前工作中的一个老项目,有2万多个单元测试用例,其中不少是用心之作,真正落实到了业务逻辑,开发人员可以放心的去修改代码,当然一切都必须按

  • 浅谈.Net Core后端单元测试的实现

    1. 前言 单元测试一直都是"好处大家都知道很多,但是因为种种原因没有实施起来"的一个老大难问题.具体是否应该落地单元测试,以及落地的程度, 每个项目都有自己的情况. 本篇为个人认为"如何更好地写单元测试", 即更加 偏向实践向 中夹杂一些理论的分享. 下列示例的单元测试框架为 xUnit , Mock库为 Moq 2. 为什么需要单元测试 优点有很多, 这里提两点我个人认为的很明显的好处 2.1 防止回归 通常在进行新功能/模块的开发或者是重构的时候,测试会进行回

  • .NET Core单元测试的两种方法介绍

    应用程序测试的类型很多,包括集成测试,Web 测试,负载测试等.在最底层的是单元测试,此测试可以测试单个软件组件或方法.单元测试一般只测试开发人员的代码,不应该测试基础结构普.问题,如数据库,文件系统或网络资源等.单元测试可以使用测试驱动开发(TDD)编写,也可以将它们添加到现有代码已确认其正确性. 在编写单元测试时,注意不要随意地在基础结构上引入依赖项.这些依赖项往往使测试更慢,更脆弱,因此应该将其保留用于继承测试.可以通过遵循显示依赖性原则,使用依赖注入从框架请求依赖关系,以此来避免应用程序

  • Android 拍照后返回缩略图的两种方法介绍

    目录 前言: 一.这就是第一种方法,比较简单,不用将图片保存到手机本地存储下来. 二.第二种方法 总结 前言: 如果简单地拍照片并非您应用的主要目标,那么您可能希望从相机应用中获取图片并对该图片执行一些操作. 一.这就是第一种方法,比较简单,不用将图片保存到手机本地存储下来. 下面我们看具体代码: 1.首先是布局文件activity_photothumbnail.xml <?xml version="1.0" encoding="utf-8"?> <

  • Java编程求二叉树的镜像两种方法介绍

    给出一棵二叉树,求它的镜像,如下图:右边是二叉树是左边二叉树的镜像. 仔细分析这两棵树的特点,看看能不能总结出求镜像的步骤.这两棵树的根节点相同,但他们的左右两个子节点交换了位置.因此我们不妨先在树中交换根节点的两个子节点,就得到了下面一幅图中的第二颗树 解法1(递归) 思路1:如果当前节点为空,返回,否则交换该节点的左右节点,递归的对其左右节点进行交换处理. /*class TreeNode{ int val; TreeNode left=null; TreeNode right=null;

  • C#下解析HTML的两种方法介绍

    在搜索引擎的开发中,我们需要对Html进行解析.本文介绍C#解析HTML的两种方法.AD: 在搜索引擎的开发中,我们需要对网页的Html内容进行检索,难免的就需要对Html进行解析.拆分每一个节点并且获取节点间的内容.此文介绍两种C#解析Html的方法. C#解析Html的第一种方法:用System.Net.WebClient下载Web Page存到本地文件或者String中,用正则表达式来分析.这个方法可以用在Web Crawler等需要分析很多Web Page的应用中.估计这也是大家最直接,

  • Android通过LIstView显示文件列表的两种方法介绍

    在Android中通过ListView显示SD卡中的文件列表一共有两种方法,一是:通过继承ListActivity显示;二是:利用BaseAdapter显示.BaseAdapter是一个公共基类适配器,用于对ListView和Spinner等 一些控件提供显示数据.下面是利用BaseAdapter类来实现通过LIstView显示SD卡的步骤: 1.main.xml界面设计,如下图 复制代码 代码如下: <?xml version="1.0" encoding="utf-

  • js控制页面控件隐藏显示的两种方法介绍

    javascript控制页面控件隐藏显示的两种方法,方法的不同之处在于控件隐藏后是否还在页面上占位 方法一: 复制代码 代码如下: document.all["panelsms"].style.visibility="hidden"; document.all["panelsms"].style.visibility="visible"; 方法二: 复制代码 代码如下: document.all["panelsms&

  • UIImage初始化的区别两种方法介绍(面试常见)

    UIImage可以通过以下两种方式进行初始化: //第一种初始化方式:[注意使用这种初始化的时候如果是png格式的可以不给后缀名,根据屏幕的的分辨率去匹配图片] UIImage *image = [UIImage imageNamed:@"v_red_heart_selected"]; //第二种初始化方式:[必须拼接图片的全名称,否则image的路径为空] NSString *filePath = [[NSBundle mainBundle] pathForResource:@&qu

  • centos7安装nginx的两种方法介绍

    centos7安装nginx 第一种方式:通过yum安装 直接通过 yum install nginx 肯定是不行的,因为yum没有nginx,所以首先把 nginx 的源加入 yum 中. 运行下面的命令: 1.将nginx放到yum repro库中 复制代码 代码如下: [root@localhost ~]# rpm -ivh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noa

  • c#判断磁盘驱动器类型的两种方法介绍

    1.使用WINDOWS API 复制代码 代码如下: /// <summary> /// 判断一个磁盘驱动器的类型 /// </summary> /// <param name="nDrive">包含了驱动器根目录路径的一个字串</param> /// <returns>Long,如驱动器不能识别,则返回零.如指定的目录不存在,则返回1.如执行成功,则用下述任何一个常数指定驱动器类型:DRIVE_REMOVABLE, DRIV

  • javascript密码强度校验代码(两种方法)

    先看效果图: javascript密码强度校验代码,具体实现思路不多说了,请看下面代码和demo. 第一种方法: /* *密码安全程度 *return :全部为字母或者数字,或者密码长度小于 *return : 字母数字组成,或者字母特殊字符,或者数字和特殊字符 *return : 字母和数字和特殊字符 */ String.prototype.passwordStrength=function(){ if(this.length> && this.length<=) retur

随机推荐