架构师_程序员_码农网

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 14153|回复: 3

[资料] .net/c# 使用xunit单元测试

[复制链接]
发表于 2019-1-22 14:58:26 | 显示全部楼层 |阅读模式
目前在.Net框架下的测试工具主要有Nunit、内置的MSTest以及Xunit这三个工具,本文就简单的介绍一下如何在VS中使用XUnit这个测试框架的后起之秀。

xunit支持的最低运行时间是.NET 4.5.2,其中大多数都是更高的。即使你可以构建一个4.0类库,它仍然至少可以在.NET 4.5.2上运行。详细链接:https://github.com/xunit/xunit/issues/1817


首先,我新建了一个.net 4.5.2的控制台项目,名称为:itsvse-test,xunit最新版本为:2.4.1,所以nuget命令如下:

每个包都由其所有者许可给你。NuGet 不负责第三方包,也不授予其许可证。一些包可能包括受其他许可证约束的依赖关系。单击包源(源) URL 可确定任何依赖关系。

程序包管理器控制台主机版本 4.7.0.5212

键入 "get-help NuGet" 可查看所有可用的 NuGet 命令。

PM> Install-Package xunit -Version 2.4.1


正在尝试收集与目标为“.NETFramework,Version=v4.5.2”的项目“itsvse-test”有关的包“xunit.2.4.1”的依赖项信息
收集依赖项信息花费时间 2.1 sec
正在尝试解析程序包“xunit.2.4.1”的依赖项,DependencyBehavior 为“Lowest”
解析依赖项信息花费时间 0 ms
正在解析操作以安装程序包“xunit.2.4.1”
已解析操作以安装程序包“xunit.2.4.1”
从“cnblogs”检索包“xunit 2.4.1”
从“cnblogs”检索包“xunit.abstractions 2.0.3”
从“cnblogs”检索包“xunit.analyzers 0.10.0”
从“cnblogs”检索包“xunit.assert 2.4.1”
从“cnblogs”检索包“xunit.core 2.4.1”
从“cnblogs”检索包“xunit.extensibility.core 2.4.1”
从“cnblogs”检索包“xunit.extensibility.execution 2.4.1”
  GET https://api.nuget.org/v3-flatcon ... 1/xunit.2.4.1.nupkg
  GET https://api.nuget.org/v3-flatcon ... actions.2.0.3.nupkg
  GET https://api.nuget.org/v3-flatcon ... it.core.2.4.1.nupkg
  GET https://api.nuget.org/v3-flatcon ... .assert.2.4.1.nupkg
  GET https://api.nuget.org/v3-flatcon ... ty.core.2.4.1.nupkg
  GET https://api.nuget.org/v3-flatcon ... ecution.2.4.1.nupkg
  GET https://api.nuget.org/v3-flatcon ... lyzers.0.10.0.nupkg
  OK https://api.nuget.org/v3-flatcon ... actions.2.0.3.nupkg 116 毫秒
  OK https://api.nuget.org/v3-flatcon ... 1/xunit.2.4.1.nupkg 117 毫秒
正在安装 xunit.abstractions 2.0.3。
正在安装 xunit 2.4.1。
  OK https://api.nuget.org/v3-flatcon ... it.core.2.4.1.nupkg 151 毫秒
正在安装 xunit.core 2.4.1。
  OK https://api.nuget.org/v3-flatcon ... .assert.2.4.1.nupkg 167 毫秒
正在安装 xunit.assert 2.4.1。
  OK https://api.nuget.org/v3-flatcon ... ty.core.2.4.1.nupkg 221 毫秒
正在安装 xunit.extensibility.core 2.4.1。
  OK https://api.nuget.org/v3-flatcon ... lyzers.0.10.0.nupkg 200 毫秒
正在安装 xunit.analyzers 0.10.0。
  OK https://api.nuget.org/v3-flatcon ... ecution.2.4.1.nupkg 306 毫秒
正在安装 xunit.extensibility.execution 2.4.1。
正在将程序包“xunit.abstractions.2.0.3”添加到文件夹“C:\Users\itsvse_pc\Source\Repos\itsvse-test\packages”
已将程序包“xunit.abstractions.2.0.3”添加到文件夹“C:\Users\itsvse_pc\Source\Repos\itsvse-test\packages”
已将程序包“xunit.abstractions.2.0.3”添加到“packages.config”
已将“xunit.abstractions 2.0.3”成功安装到 itsvse-test
正在将只有工具组的程序包“xunit.analyzers.0.10.0”添加到“itsvse-test”
正在将程序包“xunit.analyzers.0.10.0”添加到文件夹“C:\Users\itsvse_pc\Source\Repos\itsvse-test\packages”
已将程序包“xunit.analyzers.0.10.0”添加到文件夹“C:\Users\itsvse_pc\Source\Repos\itsvse-test\packages”
已将程序包“xunit.analyzers.0.10.0”添加到“packages.config”
正在执行脚本文件“C:\Users\itsvse_pc\Source\Repos\itsvse-test\packages\xunit.analyzers.0.10.0\tools\install.ps1”
已将“xunit.analyzers 0.10.0”成功安装到 itsvse-test
正在将程序包“xunit.assert.2.4.1”添加到文件夹“C:\Users\itsvse_pc\Source\Repos\itsvse-test\packages”
已将程序包“xunit.assert.2.4.1”添加到文件夹“C:\Users\itsvse_pc\Source\Repos\itsvse-test\packages”
已将程序包“xunit.assert.2.4.1”添加到“packages.config”
已将“xunit.assert 2.4.1”成功安装到 itsvse-test
正在将程序包“xunit.extensibility.core.2.4.1”添加到文件夹“C:\Users\itsvse_pc\Source\Repos\itsvse-test\packages”
已将程序包“xunit.extensibility.core.2.4.1”添加到文件夹“C:\Users\itsvse_pc\Source\Repos\itsvse-test\packages”
已将程序包“xunit.extensibility.core.2.4.1”添加到“packages.config”
已将“xunit.extensibility.core 2.4.1”成功安装到 itsvse-test
正在将程序包“xunit.extensibility.execution.2.4.1”添加到文件夹“C:\Users\itsvse_pc\Source\Repos\itsvse-test\packages”
已将程序包“xunit.extensibility.execution.2.4.1”添加到文件夹“C:\Users\itsvse_pc\Source\Repos\itsvse-test\packages”
已将程序包“xunit.extensibility.execution.2.4.1”添加到“packages.config”
已将“xunit.extensibility.execution 2.4.1”成功安装到 itsvse-test
正在将程序包“xunit.core.2.4.1”添加到文件夹“C:\Users\itsvse_pc\Source\Repos\itsvse-test\packages”
已将程序包“xunit.core.2.4.1”添加到文件夹“C:\Users\itsvse_pc\Source\Repos\itsvse-test\packages”
已将程序包“xunit.core.2.4.1”添加到“packages.config”
已将“xunit.core 2.4.1”成功安装到 itsvse-test
正在将只有依赖项的程序包“xunit.2.4.1”添加到项目“itsvse-test”。
正在将程序包“xunit.2.4.1”添加到文件夹“C:\Users\itsvse_pc\Source\Repos\itsvse-test\packages”
已将程序包“xunit.2.4.1”添加到文件夹“C:\Users\itsvse_pc\Source\Repos\itsvse-test\packages”
已将程序包“xunit.2.4.1”添加到“packages.config”
已将“xunit 2.4.1”成功安装到 itsvse-test
执行 nuget 操作花费时间 5.51 sec
已用时间: 00:00:07.7781544
PM>
安装插件包:xunit.runner.console(本文略) 和 xunit.runner.visualstudio

其中xUnit是框架,而xunit.runner.visualstudio是vs插件包,让我们可以方便的在vs中调试。安装xunit.runner.console也可以在CMD下调试,但是如果只支持这个,相信也没多少人会用这个框架,毕竟敲命令的方式严重拉低了Visual Studio的档次,所以这里也不做讲解。

这里,我们只安装xunit.runner.visualstudio插件包,在解决方案资源管理器中右键单击项目并选择Manage NuGet Packages。搜索(并安装)名为的包xunit.runner.visualstudio:

QQ截图20190122145100.jpg

确保测试浏览器可见(转到测试 > 窗口 > 测试资源管理器)。每次构建项目时,运行器都会在项目中发现单元测试。经过一段时间的发现,您应该看到已发现的测试列表:

QQ截图20190122145409.jpg

编辑Program文件,更改如下代码:

单击“ 全部运行”窗口中的链接,您应该在运行测试时在“测试资源管理器”窗口中看到结果更新:

QQ截图20190122145734.jpg

您可以单击失败的测试以查看失败消息和堆栈跟踪。您可以单击堆栈跟踪行,直接转到失败的代码行。

(完)





上一篇:睡你妹闹钟v4.6.1 专业付费高级中文版
下一篇:今天的c#学习笔记
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
 楼主| 发表于 2019-1-22 15:19:24 | 显示全部楼层
Xunit是不需要对测试类进行标记的

xUnit支持[Fact]和[Theory]两种属性。从代码中也可以看出来,[Fact]就类似于我们写的实际调用代码,而[Theory]配合InlineData可以直接在一个方法中测试多组参数。

码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
 楼主| 发表于 2019-1-22 15:31:55 | 显示全部楼层
异常测试

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")]
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
 楼主| 发表于 2019-1-22 15:37:28 | 显示全部楼层
我们在做单元测试的时候,常常困扰于数据的持久化问题,很多情况下我们不希望单元测试影响到数据库中的内容,而且受数据库的影响有时我们的单元测试的速度会很慢,所以我们往往希望将持久化部分隔离开,做单元测试的时候不真正的将数据持久化。这种隔离我们一般使用抽象的方式,也就是利用接口或抽象类将持久化层隔离开,然后利用mock来模拟相应的接口或抽象类来完成相应的持久化类。MoQ就是这种Mock框架之一,MoQ使用了C#3.0,跟NMock相比MoQ使用起来更简单,而且是强类型的方式的,源码和dll可以到http://code.google.com/p/moq/下载。现在MoQ最新的发布版本是3.1版,4.0还处在beta版中。
https://www.cnblogs.com/catcher1994/p/5498530.html
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

免责声明:
码农网所发布的一切软件、编程资料或者文章仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。如有侵权请邮件与我们联系处理。

Mail To:help@itsvse.com

QQ|手机版|小黑屋|架构师 ( 鲁ICP备14021824号-2 )|网站地图

GMT+8, 2024-4-23 18:57

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表