.Net使用Xunit工具进行单元测试

不管你爱与不爱,单元测试对于一个软件的长治久安还是必不可少的一环。在Visual Studio 2012后,VS中的测试浏览器也能与第三方的集成了,用起来还是非常方便的。目前在.Net框架下的测试工具主要有Nunit、内置的MSTest以及Xunit这三个工具,本文就简单的介绍一下如何在VS中使用XUnit这个测试框架的后起之秀。

安装Xunit:

Xunit的安装现在不需要插件支持了,直接使用NuGet安装如下两个库即可:

PM> Install-Package xunit
PM> Install-Package xunit.runner.visualstudio -Pre (Visual Studio测试浏览器支持, VS2015目前必须装Pre的)

编写测试用例:

一个简单的测试用例如下:

    public class TestClass1
    {
        [Fact]
        public void testMax()
        {
            Assert.Equal(3, Math.Max(3, 2));
        }

        [Fact]
        public void testFail()
        {
            Assert.Equal(2, Math.Max(3, 2));
        }
    }

执行测试用例

在测试浏览器中执行RunAll即可(修改后不用编译,它会自动编译)

测试方式说明:

声明测试用例:

Xunit里面不需要TestClass之类Attribute来标记测试用例类,只需要满足如下条件即可:

  • 测试类必须是public的
  • 测试用例用FactAttribute标记

断言:

Assert类用来验证测试测试函数的输出结果。

Assert.Equal(3, Math.Max(3, 2));

也可以使用一些扩展的断言库,常用的就是xunit.should库,它是以扩展函数的方式进行验证,看起来更加舒服。

PM> Install-Package xunit.should
Math.Max(3, 2).ShouldBe(3);

不过,这个库和新版本的XUnit适配不是很好,我这里写了一个简单的版本:

    static class AssertExtension
    {
        public static void ShouldBe<T>(this T value, T exprected)
        {
            if(Equals(value, exprected))
                return;

            var msg = $"与预期结果不一致,当前值是 '{format(value)}', 期望值是 '{format(exprected)}'";
            throw new InvalidOperationException(msg);
        }

        public static void ShouldNotBe<T>(this T value, T notExprected)
        {
            if (!Equals(value, notExprected))
                return;

            var msg = $"与预期结果不一致,当前值不应该是 '{format(notExprected)}' ";
            throw new InvalidOperationException(msg);
        }

        static string format(object value)
        {
            return value == null ? "NULL" : value.ToString();
        }
    }

构建和析构:

Xunit里面并不是通过SetUp和TearDown标记来表明测试用例的构建和析构操作,它每次执行测试用例的时候都会插件测试用例类,执行完成后,如果其实现了IDispose接口,则会调用Dispose函数,更加简洁明了。也就是说:

  • 在测试用例类的构造函数指向数据构建操作
  • 在Dispose函数中指向数据清理操作

异常测试

Xunit并不是通过Attribute来标记异常捕获的,而是直接使用Assert.Throws断言函数来验证异常。

    public class TestClass1
    {
        [Fact]
        public void testException()
        {
            Assert.Throws<InvalidOperationException>(() => operation());
        }

        void operation()
        {
            throw new InvalidOperationException();
        }
    }

更改测试用例名称:

[Fact(DisplayName = "Max函数测试")]

跳过测试用例:

[Fact(Skip ="重构未完成")]

分组:

[Trait("Group", "Category")]

到此这篇关于.Net使用Xunit工具进行单元测试的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

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

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

  • 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

  • 关于Net6 Xunit 集成测试的问题

    目录 1.新建测试项目 2.使用到的类库 3.注入 4.创建测试类测试方法: 5.排序执行测试方法: 6.运行测试项目: 对于单元测试.集成测试大部分开发的朋友都懒得去写,因为这要耗费精力去设计去开发,做完项目模块直接postman 调用测试(当然这是一个选择,开发也中经常用到),但是如果测试需要多样化数据,各种场景模拟这样postman测试就暴露了他的局限性,下面我将Net6下没有使用Startup以及NET6以前版本使用Startup的集成测试(单元测试雷同)做一个梳理 1.新建测试项目 2

  • Asp.Net Core利用xUnit进行主机级别的网络集成测试详解

    前言 在开发 Asp.Net Core 应用程序的过程中,我们常常需要对业务代码编写单元测试,这种方法既快速又有效,利用单元测试做代码覆盖测试,也是非常必要的事情:但是,但我们需要对系统进行集成测试的时候,需要启动服务主机,利用浏览器或者Postman 等网络工具对接口进行集成测试,这就非常的不方便,同时浪费了大量的时间在重复启动应用程序上:今天要介绍就是如何在不启动应用程序的情况下,对 Asp.Net Core WebApi 项目进行网络集成测试. 一.建立项目 1.1 首先我们建立两个项目,

  • .Net使用Xunit工具进行单元测试

    不管你爱与不爱,单元测试对于一个软件的长治久安还是必不可少的一环.在Visual Studio 2012后,VS中的测试浏览器也能与第三方的集成了,用起来还是非常方便的.目前在.Net框架下的测试工具主要有Nunit.内置的MSTest以及Xunit这三个工具,本文就简单的介绍一下如何在VS中使用XUnit这个测试框架的后起之秀. 安装Xunit: Xunit的安装现在不需要插件支持了,直接使用NuGet安装如下两个库即可: PM> Install-Package xunit PM> Inst

  • python中使用 unittest.TestCase单元测试的用例详解

    目录 单元测试和测试用例 各种断言方法 函数测试 1.准备测试函数 2.编写一个能使用它的程序 3.对函数进行单元测试 类测试 1.准备测试的类 2.编写一个能使用它的程序 3.对类进行单元测试 注意 单元测试和测试用例 python标准库中的模块unittest提供了代码测试工具.单元测试用于核实函数的莫个方面没有问题:测试用例是一组单元测试,这些单元测试一起核实函数在各种情形下的行为都符合要求.良好的测试用例考虑到了函数可能收到的各种输入,包含针对所有这些情形的测试.全覆盖测试用例包含一整套

  • C#使用MSTest进行单元测试

    我之前写过一篇XUNit的简介:使用Xunit来进行单元测试.Xunit在当时确实是一个最简单易用的测试框架,然而,随着发展,Xunit也变得复杂了不少,光写一个最简单的测试就要导入8个包. 如果在大一点的项目中使用到还罢了,但如果只是随手想写一点单元测试引入这一堆包确实看着不大舒服.于是我又看了下MS自家的MS TEST.发现随着发展,MS自家的MS TEST也改变了不少,虽然以前用过老版MS TEST的朋友基本上能拿着就用,但本文这里仍然简单的介绍一下,方便新手上路. 目前MS发布了两个版本

  • Golang 单元测试和基准测试实例详解

    目录 前言 Go 单元测试 单元测试覆盖率 基准测试 前言 多人协作的项目里,要保证代码的质量,自然离不开单元测试.开发完一个功能后肯定要对所写的代码进行测试,测试没有问题之后再合并到代码库供他人使用.如果强行合并到代码库可能会影响其他人开发,被上线的话肯定也会导致线上 Bug ,影响用户使用. 所以,单元测试也是一个很重要的事情.单元测试是指在开发中,对一个函数或模块的测试.其强调的是对单元进行测试. Go 单元测试 Go 语言提供了单元测试的框架,只要遵循其规则即可: 测试文件命名: 单元测

  • 测试框架nunit之assertion断言使用详解

    任何xUnit工具都使用断言进行条件的判断,NUnit自然也不例外,与其它的xUnit(如Junit.phpUnit.pythonUnit)相比,由于大量使用了Generic.Attribute等语言特征,NUnit提供了更为方面.灵活的测试方法,下面先介绍一下断言. Nunit一共有四个类断言类,分别是Assert.StringAssert.FileAssert和DirectoryAssert,它们都在NUnit.Framework命名空间,其中Assert是常用,也是我们最熟悉的,而另外三个

  • 一个合格的程序员应该读过哪些书(偏java)

    很多程序员响应,他们在推荐时也写下自己的评语. 以前就有国内网友介绍这个程序员书单,不过都是推荐数 Top 10的书. 其实除了前10本之外,推荐数前30左右的书籍都算经典,笔者整理编译这个问答贴,同时摘译部分推荐人的评语. 下面就按照各本书的推荐数排列. 1.<代码大全> 史蒂夫·迈克康奈尔 推荐数:1684 "优秀的编程实践的百科全书,<代码大全>注重个人技术,其中所有东西加起来, 就是我们本能所说的"编写整洁的代码".这本书有50页在谈论代码布局

  • C/C++ 单元自动化测试解决方案总结

    目录 前言 一.动机 1.1 方法1:使用正则表达式 1.2 方法2:使用flex/bison 分析c/c++源码文件 1.3 方法3:利用编译已经生成的AST 来生成代码 二.效果展示 2.1 业务代码零修改, 直接使用TU生成边界用例 2.2 使用注解tu::case生成用户自定义用例 2.3 使用注解tu::mock 自动生成mock方法 三.TU实现方案 3.1 AST 是什么? 3.2 AST(Abstract syntax tree) 3.3 方案 四.TU 插件使用的简易程度对比

随机推荐