-- .net core中基于xUnit框架进行单元测试(提高测试质量,减少bug,支持持续交付集成)
【官网】:https://xunit.github.io/
应用场景
一般开发项目中随着产品越来越复杂,普通的人工测试,程序员自己写几个console测试无法满足测试的工作量了。为了提高测试效率,降低测试工作量,降低bug量,可充分利用xUnit进行单元测试。xUnit甚至还可以与git协作,实现质量控制下的可持续交付。基础资源
Visual studio 2019,xUnit
使用须知
请自行查找各vs版本与xUnit版本的对应关系。另外单元测试需要注意覆盖率,需要开发人员认真对待才能体现它的效果。
配置步骤
【步骤1:vs中安装xUnit】
如果已经安装则自动跳过该步骤...
在Nuget中搜索xunit,这里我们只选xUnit.net和xunit.runner.visualstudio包。
其中xUnit是框架,而xunit.runner.visualstudio是vs插件包,让我们可以方便的在vs中调试。安装xunit.runner.console也可以在CMD下调试,但是如果只支持这个,相信也没多少人会用这个框架,毕竟敲命令的方式严重拉低了Visual Studio的档次,所以这里也不做讲解。
装好xunit.runner.visualstudio之后,打开 测试--》窗口--》测试资源管理器就可以在左侧窗口随时运行测试了。
【步骤2:创建项目,开发一个类】
正常的业务项目即可,另外为了方便单元测试,开发过程应该尽量遵循 《Clean Code》的一些原则,例如:命名规范,参数数量精简,类指责单一,函数行数避免太多等等。
试想如果函数太复杂,类指责太多,单个函数参数太多,则单元测试的用例难以理解,难以编写和把控。
【步骤3:创建xUnit测试项目】
[注1]xUnit单元测试的类库需要引用待测试的目标类库。
[注2]xUnit支持[Fact]和[Theory]两种属性。从代码中也可以看出来,[Fact]就类似于我们写的实际调用代码,而[Theory]配合InlineData可以直接在一个方法中测试多组参数。
[Fact]和[Theory]还可以带两个参数,一个是修改显示名称,一个是跳过测试
【步骤4:启动运行】
【步骤5:查看测试报告】
单元测试完成后,会有清晰的运行报告显示,绿色为成功,红色为失败,还可以通过
[Fact(DisplayName ="通过测试")]这种特性实现个性化的报告显示。
常见问题
快速入门
【一个单元测试的实例】
<步骤1:开发业务代码>
using ConfigLab.Dnc.Comp; using System; using System.Text.RegularExpressions; namespace ConfigLab.MathLab { /// <summary> /// 功能简介:写一个方法,之后等一会用单元测试对该方法进行测试 /// 创建时间:2020-9-22 /// 创建人:http://config.net.cn /// </summary> public class StringUtils { public bool existsNumber(string sStr) { if (Regex.IsMatch(sStr, ".*[0-9]+.*")) return true; return false; } } }
<步骤2:开发单元测试项目>
using ConfigLab.MathLab; using System; using Xunit; namespace XUnitTestConfigLab { /// 功能简介:单元测试(测试StringUtils) /// 创建时间:2020-9-22 /// 创建人:http://config.net.cn public class UnitTestStringUtils { StringUtils mathUtilInstance = null; public UnitTestStringUtils() { mathUtilInstance = new StringUtils(); } [Fact] public void TestSuccess() { Assert.True(mathUtilInstance.existsNumber("da1be23c")); } [Fact] public void TestFalse() { Assert.False(mathUtilInstance.existsNumber("abc")); } [Theory] [InlineData("")] [InlineData(" 2 ")] [InlineData("da2be2c")] public void TestBatchParams(string value) { Assert.True(mathUtilInstance.existsNumber(value)); } } }
<步骤3:运行><步骤4:查看单元测试报告>![]()