日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > C# >内容正文

C#

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

發(fā)布時(shí)間:2023/12/20 C# 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C# 使用Xunit 框架进行代码测试 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

如何引用xunit 管理包,和新建測(cè)試類這里就不在一一進(jìn)行詳說,可以自行搜索。

為啥要進(jìn)行代碼測(cè)試,這樣能有效減少我們代碼種的bug.好處多多,這里也不在進(jìn)行贅述。

主要測(cè)試代碼:

using DemoXUnitText; using System; using Xunit;/*當(dāng)一個(gè)測(cè)試方法需要多組測(cè)試參數(shù)時(shí)候,Fact 標(biāo)識(shí)屬性已經(jīng)不能滿足我們的需求,我們需要另外一種方式,InlineData,Theory 屬性標(biāo)識(shí) 請(qǐng)看方式11方法雖然能夠?qū)崿F(xiàn)批量數(shù)據(jù)的測(cè)試,但是參數(shù)還是只能寫到測(cè)試代碼中,如果能夠讀取某個(gè)特定文件和數(shù)據(jù)庫(kù)就好了,請(qǐng)看方法二使用MemberData(屬性名,MemberType=類名) 標(biāo)識(shí)進(jìn)行方法標(biāo)識(shí),要求靜態(tài)字段,實(shí)現(xiàn)IEnumerable<Object[]>接口. 在加載靜態(tài)字段也可以通過IO來讀取數(shù)據(jù),進(jìn)行測(cè)試。Over*/ namespace DemoText {[Trait("Calculator","計(jì)算機(jī)")]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);}} }

//另一個(gè)類的測(cè)試

using DemoXUnitText; using System; using System.Collections.Generic; using System.Text; using Xunit; using Xunit.Abstractions;/*自定義信息輸出,要想在測(cè)試中和控制臺(tái)一樣的輸出, 需要實(shí)現(xiàn)ITestOutputHelper 進(jìn)行依賴注入操作見構(gòu)造函數(shù)*//*如果測(cè)試中要釋放一些非托管代碼資源,可以實(shí)現(xiàn)IDisposable 接口詳情請(qǐng)見在 實(shí)現(xiàn)接口的偽代碼*//*有時(shí)候我們new一個(gè)測(cè)試對(duì)象相當(dāng)消耗時(shí)間, 例如下面中filter的 sut,如何創(chuàng)建一個(gè)通用上下文呢,此處要使用依賴注入。在測(cè)試類中實(shí)現(xiàn)一個(gè)泛型接口,IClassFixture*/namespace DemoText {public class PatientTests:IDisposable, IClassFixture<PatientFixTrue>//ICollectionFixture<PatientFixTrue>{private Patient sut;private readonly ITestOutputHelper _outPut;private int disSumNu = 0;//運(yùn)行每一個(gè)測(cè)試方法都會(huì)走構(gòu)造函數(shù)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標(biāo)記進(jìn)行測(cè)試分組標(biāo)記 key-value//一個(gè)方法名可以添加多個(gè)表示//也可可以作用到類級(jí)別[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);}//不需要運(yùn)行某個(gè)測(cè)試可以在 Fact 標(biāo)簽中添加 skip="注釋"[Fact(Skip ="跳過這個(gè)測(cè)試Create")]public void BeNewWhenCreate(){var result = sut.IsNew;Assert.True(result);}[Fact]public void HaveNoAddressWhenCreate(){Assert.Null(sut.HomeAddress);_outPut.WriteLine("測(cè)試文本信息輸出,自定義的。");}[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);//判斷結(jié)果集所有的元素都包含 "賬戶"//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("現(xiàn)在測(cè)試結(jié)束開始釋放非托管資源,運(yùn)行次數(shù):{0}",this.disSumNu++);}} }

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

總結(jié)

以上是生活随笔為你收集整理的C# 使用Xunit 框架进行代码测试的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。