<ul id="qxxfc"><fieldset id="qxxfc"><tr id="qxxfc"></tr></fieldset></ul>


      系列目錄 <https://www.cnblogs.com/tylerzhou/p/11204826.html>

      使用前面講過(guò)的方法基本上能夠完成工作中的大部分任務(wù)了,然而有些功能實(shí)現(xiàn)起來(lái)還是比較麻煩的,比如說(shuō)
      字符串相等性比較不區(qū)分大小寫(xiě),字符串是否匹配某一正則規(guī)則,集合中的每一個(gè)(某一個(gè))元素是否符合特定規(guī)則
      等,Nunit提供了一些特定的方法用來(lái)實(shí)現(xiàn)一些用普通斷言比較難以實(shí)現(xiàn)的擴(kuò)展類(lèi)型和方法.

      下面介紹一下StringAssert類(lèi)型下面的方法

      StringAssert.AreEqualIgnoringCase(string expected,string actual)

      此方法用于斷言?xún)蓚€(gè)字符串在不區(qū)分大小寫(xiě)情況下是否相等,需要提供兩個(gè)參數(shù),第一個(gè)是期待的結(jié)果,第二個(gè)是實(shí)際結(jié)果.這個(gè)方法比較簡(jiǎn)單,不再提供示例.

      需要注意的是Nunit里有許多需要提供兩個(gè)參數(shù)的方法,一般情況下都是第一個(gè)是期待的結(jié)果,第二個(gè)是實(shí)際結(jié)果

      StringAssert.Contains

      用于斷言一個(gè)字符串是否包含另一字符串,其中第一個(gè)參數(shù)為被包含的字符串,第二個(gè)為實(shí)際字符串,這個(gè)方法語(yǔ)義不是特別明確,需要注意
      [Test] public void DemoTest() { StringAssert.Contains("hello",
      "hello,world"); }
      這段代碼片段會(huì)返回成功

      StringAssert.StartsWith

      用于斷言字符串是否以某(幾)字符開(kāi)始
      [Test] public void DemoTest() { StringAssert.StartsWith("h", "hello,world"); }
      StringAssert.EndsWith

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

      StringAssert.IsMatch

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

      [warning]這個(gè)方法并沒(méi)有大小寫(xiě)開(kāi)關(guān)

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

      FileAssert.AreEqual

      這個(gè)方法用于斷言?xún)蓚€(gè)文件是否是同一個(gè)文件,接受字符串參數(shù)

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

      FileAssert.Exists

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

      DirectoryAssert方法類(lèi)似,并且這些方法都對(duì)應(yīng)的有相反方向的斷言,方法名包含Not,很容易理解

      單元測(cè)試過(guò)程中,我們很多時(shí)候都要處理集合,Nunit里提供了一個(gè) CollectionAssert 類(lèi)用于處理對(duì)集合類(lèi)型的斷言

      下面介紹一下這個(gè)類(lèi)下面的斷言方法

      CollectionAssert.AllItemsAreInstancesOfType

      用于斷言集合里面的元素是否都是某一特定類(lèi)型.
      [Test] public void DemoTest() { ArrayList ar = new ArrayList {"a", "b", "c"};
      CollectionAssert.AllItemsAreInstancesOfType(ar, typeof(string)); }
      以上斷言會(huì)返回成功,因?yàn)槲覀兿駻rrayList里添加的全是string類(lèi)型的元素

      需要注意,很多斷言方法第一個(gè)參數(shù)是期待類(lèi)型,第二個(gè)是實(shí)際類(lèi)型,而此方法則相反,第一個(gè)是實(shí)際集合,第二個(gè)是期待的類(lèi)型

      這里的類(lèi)型支持父類(lèi),比如說(shuō)如果是typeof(object)也同樣能通過(guò),語(yǔ)義上來(lái)講,元素是string類(lèi)型,也是object類(lèi)型,講得通的

      CollectionAssert.AllItemsAreNotNull

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

      CollectionAssert.AllItemsAreUnique

      用于斷言集合里面的元素全部是惟一的,即集合里沒(méi)有重復(fù)元素.

      [warning]
      需要注意的是,這個(gè)方法并沒(méi)有提供一個(gè)重載支持自定義比較器,它只能用于斷言簡(jiǎn)單類(lèi)型,如string,int,datetime等是否惟一,如果是類(lèi)類(lèi)型則需要重載
      equals和gethashcode但是通常我們并不這樣做,而是在類(lèi)外部提供一個(gè)比較器,如果判斷復(fù)雜類(lèi)型是否惟一,我們?cè)谝院笤俳榻B

      下面舉一個(gè)例子說(shuō)明這個(gè)問(wèn)題
      [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); }
      以上代碼測(cè)試會(huì)通過(guò),因?yàn)閮蓚€(gè)new出來(lái)的Persn不是同一個(gè)對(duì)象,但實(shí)際業(yè)務(wù)中,兩個(gè)對(duì)象的屬性完全相等時(shí)我們就認(rèn)為它們是相等的,以上我們期待的結(jié)果是 不通過(guò)

      CollectionAssert.AreEqual


      用于斷言?xún)蓚€(gè)集合是否相等,如果兩個(gè)集合里的元素都是簡(jiǎn)單對(duì)象,如果是復(fù)雜對(duì)象用這個(gè)方法并不是很方便(雖然此方法提供提供IComparer作為參數(shù),然而IComparer對(duì)集合并不是很方便)

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

      還有一點(diǎn)需要說(shuō)明還有一點(diǎn)需要說(shuō)明,如以上所說(shuō),兩個(gè)集合元素順序一致,并且在運(yùn)行時(shí)類(lèi)型是一致的就會(huì)被認(rèn)為是相等,這兩個(gè)集合的類(lèi)型不必一樣
      ,比如說(shuō)一個(gè)是array,一個(gè)是list,泛型參數(shù)也不必須一樣

      只要在運(yùn)行時(shí)類(lèi)型是一致的即可

      請(qǐng)看下面一段代碼
      [Test] public void DemoTest() { int[] a = {3, 4, 5}; List<object> b =new
      List<object> {3, 4, 5}; CollectionAssert.AreEqual(a, b); }
      a和b兩個(gè)集合的集合類(lèi)型不一樣,泛型類(lèi)型也不一樣,但是運(yùn)行的時(shí)候卻是一樣的,因此以上代碼執(zhí)行會(huì)返回成功狀態(tài)

      CollectionAssert.AreEquivalent

      這個(gè)方法用來(lái)判斷兩個(gè)集合的元素是否等價(jià),如果兩個(gè)集合元素類(lèi)型相同,個(gè)數(shù)也相同,即視為等價(jià),與上面的方法相比,它不關(guān)心順序
      [Test] public void DemoTest() { int[] a = {3, 4, 5}; List<object> b =new
      List<object> {4,3, 5}; CollectionAssert.AreEquivalent(a, b); }
      以上代碼測(cè)試是通過(guò)的

      CollectionAssert.Contains

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

      需要說(shuō)明的是.要判斷集合中是否包含某一元素,只要集合運(yùn)行時(shí)有特定元素和指定元素類(lèi)型相同,并且值相同,即認(rèn)為集合包含這一元素

      請(qǐng)看以下代碼片段
      [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類(lèi)型元素,只有object類(lèi)型的值為4的元素,然而它在運(yùn)行時(shí)真正的類(lèi)型是int,因此以上測(cè)試也是通過(guò)的.

      CollectionAssert.IsEmpty

      用于斷言某一集合是空集合,即元素個(gè)數(shù)為0

      CollectionAssert.IsOrdered

      用于斷言集合元素是否按正序排列,所謂正序列,是指按阿拉伯?dāng)?shù)字或者字符表順序正序排列.

      CollectionAssert.IsSubsetOf


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

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

      CollectionAssert.IsSupersetOf

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

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

      友情鏈接
      ioDraw流程圖
      API參考文檔
      OK工具箱
      云服務(wù)器優(yōu)惠
      阿里云優(yōu)惠券
      騰訊云優(yōu)惠券
      京東云優(yōu)惠券
      站點(diǎn)信息
      問(wèn)題反饋
      郵箱:[email protected]
      QQ群:637538335
      關(guān)注微信

        <ul id="qxxfc"><fieldset id="qxxfc"><tr id="qxxfc"></tr></fieldset></ul>
          欧美高清无码成人网 | 黄色成人小说网站 | 久久久久国产成人精品亚洲午夜 | 与少妇王红的性事 | 美女被捅爽 | 国产成人精品视频 | 亚洲无码播放 | 亚洲国产乱码 | 在办公室伦流澡到高潮在线观看 | 神马午夜福利 |