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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

.net持续集成测试篇之Nunit文件断言、字符串断言及集合断言

發布時間:2023/12/4 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 .net持续集成测试篇之Nunit文件断言、字符串断言及集合断言 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

使用前面講過的方法基本上能夠完成工作中的大部分任務了,然而有些功能實現起來還是比較麻煩的,比如說

字符串相等性比較不區分大小寫,字符串是否匹配某一正則規則,集合中的每一個(某一個)元素是否符合特定規則等,Nunit提供了一些特定的方法用來實現一些用普通斷言比較難以實現的擴展類型和方法.

下面介紹一下StringAssert類型下面的方法

StringAssert.AreEqualIgnoringCase(string expected,string actual)

此方法用于斷言兩個字符串在不區分大小寫情況下是否相等,需要提供兩個參數,第一個是期待的結果,第二個是實際結果.這個方法比較簡單,不再提供示例.

需要注意的是Nunit里有許多需要提供兩個參數的方法,一般情況下都是第一個是期待的結果,第二個是實際結果

StringAssert.Contains

用于斷言一個字符串是否包含另一字符串,其中第一個參數為被包含的字符串,第二個為實際字符串,這個方法語義不是特別明確,需要注意

[Test] public void DemoTest() { StringAssert.Contains("hello", "hello,world"); }

這段代碼片段會返回成功

StringAssert.StartsWith

用于斷言字符串是否以某(幾)字符開始

[Test] public void DemoTest() { StringAssert.StartsWith("h", "hello,world"); }

StringAssert.EndsWith

與StringAssert.StartsWith類似,string類也有此方法,相信大家都比較熟悉

StringAssert.IsMatch

用于斷言指定字符串是否匹配某一正則規則

[warning]這個方法并沒有大小寫開關

下面介紹兩個與文件(目錄)有關的斷言類FileAssert和DirectoryAssert.兩個類下面的斷言方法基本一樣,只是一個是斷言文件,一個是斷言目錄.下面以FileAssert為例說明

FileAssert.AreEqual

這個方法用于斷言兩個文件是否是同一個文件,接受字符串參數

需要說明的是,字符串路徑必須指向文件,而不能是目錄或者不存在的文件.

FileAssert.Exists

用于斷言某個文件是否存在,接受字符串參數或者FileInfo作為參數

DirectoryAssert方法類似,并且這些方法都對應的有相反方向的斷言,方法名包含Not,很容易理解

單元測試過程中,我們很多時候都要處理集合,Nunit里提供了一個?CollectionAssert?類用于處理對集合類型的斷言

下面介紹一下這個類下面的斷言方法

CollectionAssert.AllItemsAreInstancesOfType

用于斷言集合里面的元素是否都是某一特定類型.

[Test] public void DemoTest() { ArrayList ar = new ArrayList {"a", "b", "c"}; CollectionAssert.AllItemsAreInstancesOfType(ar, typeof(string)); }

以上斷言會返回成功,因為我們向ArrayList里添加的全是string類型的元素

需要注意,很多斷言方法第一個參數是期待類型,第二個是實際類型,而此方法則相反,第一個是實際集合,第二個是期待的類型

這里的類型支持父類,比如說如果是typeof(object)也同樣能通過,語義上來講,元素是string類型,也是object類型,講得通的

CollectionAssert.AllItemsAreNotNull

用于斷言集合里的元素全部不是Null,也即集合不包含null元素,這個方法只有一個參數,傳入我們要判斷的集合即可

CollectionAssert.AllItemsAreUnique

用于斷言集合里面的元素全部是惟一的,即集合里沒有重復元素.

[warning]需要注意的是,這個方法并沒有提供一個重載支持自定義比較器,它只能用于斷言簡單類型,如string,int,datetime等是否惟一,如果是類類型則需要重載equals和gethashcode但是通常我們并不這樣做,而是在類外部提供一個比較器,如果判斷復雜類型是否惟一,我們在以后再介紹

下面舉一個例子說明這個問題

[Test] public void DemoTest() { Person[] psn = new Person[] { new Person { Name="sto",Age=32,BirthDay=DateTime.Today.AddYears(-10)}, new Person { Name="sto",Age=32,BirthDay=DateTime.Today.AddYears(-10)}}; CollectionAssert.AllItemsAreUnique(psn); }

以上代碼測試會通過,因為兩個new出來的Persn不是同一個對象,但實際業務中,兩個對象的屬性完全相等時我們就認為它們是相等的,以上我們期待的結果是?不通過

CollectionAssert.AreEqual

用于斷言兩個集合是否相等,如果兩個集合里的元素都是簡單對象,如果是復雜對象用這個方法并不是很方便(雖然此方法提供提供IComparer作為參數,然而IComparer對集合并不是很方便)

[warning]這里的兩個集合相等第一集合元素個數必須相等(不用多說),第二集合元素的順序必須一致的

還有一點需要說明還有一點需要說明,如以上所說,兩個集合元素順序一致,并且在運行時類型是一致的就會被認為是相等,這兩個集合的類型不必一樣,比如說一個是array,一個是list,泛型參數也不必須一樣

只要在運行時類型是一致的即可

請看下面一段代碼

[Test] public void DemoTest() { int[] a = {3, 4, 5}; List<object> b =new List<object> {3, 4, 5}; CollectionAssert.AreEqual(a, b); }

a和b兩個集合的集合類型不一樣,泛型類型也不一樣,但是運行的時候卻是一樣的,因此以上代碼執行會返回成功狀態

CollectionAssert.AreEquivalent

這個方法用來判斷兩個集合的元素是否等價,如果兩個集合元素類型相同,個數也相同,即視為等價,與上面的方法相比,它不關心順序

[Test] public void DemoTest() { int[] a = {3, 4, 5}; List<object> b =new List<object> {4,3, 5}; CollectionAssert.AreEquivalent(a, b); }

以上代碼測試是通過的

CollectionAssert.Contains

用于斷言集合是否包含某一元素

需要說明的是.要判斷集合中是否包含某一元素,只要集合運行時有特定元素和指定元素類型相同,并且值相同,即認為集合包含這一元素

請看以下代碼片段

[Test] public void DemoTest() { int[] a = {3, 4, 5}; object element = 4; List<object> b =new List<object> {element,3, 5}; CollectionAssert.Contains(b, 4); }

以上代碼段中b集合雖然不包含值為4的int類型元素,只有object類型的值為4的元素,然而它在運行時真正的類型是int,因此以上測試也是通過的.

CollectionAssert.IsEmpty

用于斷言某一集合是空集合,即元素個數為0

CollectionAssert.IsOrdered

用于斷言集合元素是否按正序排列,所謂正序列,是指按阿拉伯數字或者字符表順序正序排列.

CollectionAssert.IsSubsetOf

用于判斷一個集合是否為另一個集合的子集,與以上相同的是,這兩個集合不必是同一類集合(可以一個是array,一個是list),只要一個集合的元素完全包含在另一個集合中,即認為它是另一個集合的子集

只要一個集合元素完全包含在另一個集合中即可,順序不必相同

CollectionAssert.IsSupersetOf

用于斷言一個集合是否是另一個集合的父集,與子集判斷用法一樣.

以上大部分方法都有一個判斷相反的方法,名稱中多一個Not,這里不再羅列

總結

以上是生活随笔為你收集整理的.net持续集成测试篇之Nunit文件断言、字符串断言及集合断言的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。