您现在的位置是:网站首页> 编程资料编程资料
.Net使用Xunit工具进行单元测试_实用技巧_
2023-05-24
375人已围观
简介 .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(this T value, T exprected) { if(Equals(value, exprected)) return; var msg = $"与预期结果不一致,当前值是 '{format(value)}', 期望值是 '{format(exprected)}'"; throw new InvalidOperationException(msg); } public static void ShouldNotBe(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(() => operation()); } void operation() { throw new InvalidOperationException(); } } 更改测试用例名称:
[Fact(DisplayName = "Max函数测试")]
跳过测试用例:
[Fact(Skip ="重构未完成")]
分组:
[Trait("Group", "Category")]
到此这篇关于.Net使用Xunit工具进行单元测试的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持。
相关内容
- .Net使用日志框架NLog_实用技巧_
- 在.NET Core中使用CSRedis的详细过程_实用技巧_
- 在Code First模式中自动创建Entity模型_实用技巧_
- Entity Framework代码优先Code First入门_实用技巧_
- .Net中的不可变集合(Immutable Collection)程序集简介_基础应用_
- 一文掌握.Net core中的缓存_实用技巧_
- C#中常用的IO操作介绍_实用技巧_
- .NetCore MemoryCache使用详解_实用技巧_
- .Net Core基于ImageSharp实现图片缩放与裁剪_实用技巧_
- .NET Core实现企业微信获取部门成员_实用技巧_
