<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
不管你愛與不愛,單元測試對於一個軟體的長治久安還是必不可少的一環。在Visual Studio 2012後,VS中的測試瀏覽器也能與第三方的整合了,用起來還是非常方便的。目前在.Net框架下的測試工具主要有Nunit、內建的MSTest以及Xunit這三個工具,本文就簡單的介紹一下如何在VS中使用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<T>(this T value, T exprected) { if(Equals(value, exprected)) return; var msg = $"與預期結果不一致,當前值是 '{format(value)}', 期望值是 '{format(exprected)}'"; throw new InvalidOperationException(msg); } public static void ShouldNotBe<T>(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<InvalidOperationException>(() => operation()); } void operation() { throw new InvalidOperationException(); } }
[Fact(DisplayName = "Max函數測試")]
[Fact(Skip ="重構未完成")]
[Trait("Group", "Category")]
到此這篇關於.Net使用Xunit工具進行單元測試的文章就介紹到這了。希望對大家的學習有所幫助,也希望大家多多支援it145.com。
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45