欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程语言 > C# >内容正文

C#

C# 使用Xunit 框架进行代码测试

发布时间:2023/12/20 C# 59 豆豆
生活随笔 收集整理的这篇文章主要介绍了 C# 使用Xunit 框架进行代码测试 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

如何引用xunit 管理包,和新建测试类这里就不在一一进行详说,可以自行搜索。

为啥要进行代码测试,这样能有效减少我们代码种的bug.好处多多,这里也不在进行赘述。

主要测试代码:

using DemoXUnitText; using System; using Xunit;/*当一个测试方法需要多组测试参数时候,Fact 标识属性已经不能满足我们的需求,我们需要另外一种方式,InlineData,Theory 属性标识 请看方式11方法虽然能够实现批量数据的测试,但是参数还是只能写到测试代码中,如果能够读取某个特定文件和数据库就好了,请看方法二使用MemberData(属性名,MemberType=类名) 标识进行方法标识,要求静态字段,实现IEnumerable<Object[]>接口. 在加载静态字段也可以通过IO来读取数据,进行测试。Over*/ namespace DemoText {[Trait("Calculator","计算机")]public class CalculatorTests{[Fact]public void CalculatorAdd(){//arrange var sut = new Calculator();//actint result = sut.Add(1, 4);//assertAssert.Equal(5, result);}[Trait("Cal","DataTestOne")][Theory][InlineData(1,2,3)][InlineData(2,3,5)]public void CalcultorAddMethodOne(int x,int y, int expectedNu){var sut = new Calculator();//actint result = sut.Add(x, y);//assert Assert.Equal(expectedNu, result);}[Trait("Cal", "DataTestTwo")][Theory][MemberData(nameof(TestData.DataTest),MemberType =typeof(TestData))]public void CalcultorAddMethodTwo(int x, int y, int expectedNu){var sut = new Calculator();//actint result = sut.Add(x, y);//assert Assert.Equal(expectedNu, result);}[Fact]public void CalculatorFlag(){//arrangevar sut = new Calculator();//actbool flag = sut.GetFlag();//assertAssert.True(flag);}} }

//另一个类的测试

using DemoXUnitText; using System; using System.Collections.Generic; using System.Text; using Xunit; using Xunit.Abstractions;/*自定义信息输出,要想在测试中和控制台一样的输出, 需要实现ITestOutputHelper 进行依赖注入操作见构造函数*//*如果测试中要释放一些非托管代码资源,可以实现IDisposable 接口详情请见在 实现接口的伪代码*//*有时候我们new一个测试对象相当消耗时间, 例如下面中filter的 sut,如何创建一个通用上下文呢,此处要使用依赖注入。在测试类中实现一个泛型接口,IClassFixture*/namespace DemoText {public class PatientTests:IDisposable, IClassFixture<PatientFixTrue>//ICollectionFixture<PatientFixTrue>{private Patient sut;private readonly ITestOutputHelper _outPut;private int disSumNu = 0;//运行每一个测试方法都会走构造函数public PatientTests(ITestOutputHelper output,PatientFixTrue patFixTrue){//assert//this.sut = new Patient();this.sut = patFixTrue.patient;sut.FirstName = "Bob";sut.LastName = "Man";//保存输出帮助类this._outPut = output;}//Trait标记进行测试分组标记 key-value//一个方法名可以添加多个表示//也可可以作用到类级别[Trait("Pat","HeartBate")][Trait("Be","New")][Fact]public void PatientMeasurHeartbate(){//actint heartNu = sut.MeasurHeartbate();//assertAssert.InRange<int>(heartNu, 10, 100);}[Trait("Pat","Name")][Fact]public void PatentCheckFisrtName(){Assert.EndsWith("b", sut.FirstName);Assert.Contains("Bob", sut.FirstName);Assert.NotEqual("bob", sut.FirstName);Assert.Matches(@"^[a-zA-Z]+$", sut.FirstName);}//不需要运行某个测试可以在 Fact 标签中添加 skip="注释"[Fact(Skip ="跳过这个测试Create")]public void BeNewWhenCreate(){var result = sut.IsNew;Assert.True(result);}[Fact]public void HaveNoAddressWhenCreate(){Assert.Null(sut.HomeAddress);_outPut.WriteLine("测试文本信息输出,自定义的。");}[Fact]public void HaveHadAccountProterty(){sut.AccountList.Add("账户1:1234");sut.AccountList.Add("账户2:456");sut.AccountList.Add("账户3:789");// Assert.Contains("1234", sut.AccountList);Assert.DoesNotContain("庄户", sut.AccountList);Assert.Contains(sut.AccountList, ret => ret.Contains("1234"));List<string> ls = new List<string>();//Assert.Equal(sut.AccountList, ls);//判断结果集所有的元素都包含 "账户"//Assert.All(sut.AccountList, x => x.Contains("账户"));//也可以这样写Assert.All(sut.AccountList, ret => Assert.Contains("账户", ret));Assert.All(sut.AccountList, ret=>Assert.True(ret.Length>=2));}[Trait ("Be","New")][Fact]public void BeAPatient(){Assert.IsType<Patient>(sut);Assert.IsAssignableFrom<Patient>(sut);}[Trait("Be", "New")][Fact]public void BeAAcctionHappen(){Assert.Raises<EventArgs>(handler=>sut.SleepEvent+=handler,handler=>sut.SleepEvent-=handler,()=>sut.Sleep());}public void Dispose(){_outPut.WriteLine("现在测试结束开始释放非托管资源,运行次数:{0}",this.disSumNu++);}} }

源码文件:https://download.csdn.net/download/weixin_43542114/16217298

总结

以上是生活随笔为你收集整理的C# 使用Xunit 框架进行代码测试的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。