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


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

      that是Nunit的新語(yǔ)法,語(yǔ)義上不如簡(jiǎn)單斷言,使用上也更加復(fù)雜,但是其功能更加強(qiáng)大.
      其基本語(yǔ)法如下代碼片段示:
      [Test] public void DemoTest() { bool b = 3 + 2 == 5; Assert.That(b, Is.True);
      }
      如上代碼片段未,第一部分為要判斷的對(duì)象,可以是一個(gè)變量,也可以是lambda表達(dá)式,第二個(gè)是約束條件.如果參數(shù)有多個(gè),That語(yǔ)義更加清析.


      That幾乎包含所有簡(jiǎn)單斷言里的語(yǔ)法,它除了支持變量,還支持表達(dá)式,更為強(qiáng)大的是它還支持自定義約束,如果第二個(gè)參數(shù)預(yù)定義的約束無(wú)法滿足我們的需求時(shí),我們可以自定義.


      That里的約束非常多,很多是和簡(jiǎn)單斷言里面一樣的(比如Is.True與Assert.True()方法一樣,Is.Positive和Assert.Positive方法一樣,類似的還有很多,大家不妨找一找),這里不再一一列舉,只給出幾個(gè)用簡(jiǎn)單斷言無(wú)法完成或者實(shí)現(xiàn)起來(lái)很麻煩的斷例子.

      例1

      先看一下代碼斷
      [Test] public void DemoTest() { double d1 = 1.1; double d2 = 2.2;
      Assert.AreEqual(3.3, d1 + d2); }
      大家猜一下以上測(cè)試結(jié)果是失敗還是成功?答案是失敗,由于精度的問(wèn)題,以上很簡(jiǎn)單的測(cè)試都會(huì)失敗



      下面看如何使用That解決這個(gè)問(wèn)題
      [Test] public void DemoTest() { double d1 = 1.1; double d2 = 2.2;
      Assert.That(3.3, Is.EqualTo(d1 + d2).Within(0.000001)); }
      Is.EqualTo和areEqual方法類似,但是它支持再串一個(gè)Within方法提供一個(gè)容差值,這樣測(cè)試就能過(guò)通了.

      例2

      先看下面代碼片段
      [Test] public void DemoTest() { string[] strs = { "a", "ab", "abc" }; int[]
      lengths = { 1, 2, 3 }; }

      以上代碼a的長(zhǎng)度為1,ab的長(zhǎng)度為2,abc的長(zhǎng)度為3,我們相要判斷集合strs里的每個(gè)元素的長(zhǎng)度是否分別對(duì)應(yīng)下面集合元素的值,如果要用普通方法需要很復(fù)雜的判斷.下面看看如何使用That結(jié)合Nunit提供的方法實(shí)現(xiàn)一行代碼判斷
      [Test] public void DemoTest() { string[] strs = { "a", "ab", "abc" }; int[]
      lengths = { 1, 2, 3 }; Assert.That(new
      ListMapper(strs).Property(nameof(string.Length)), Is.EqualTo(lengths)); }
      分析以上代碼,通過(guò)獲取String類的Length屬性,Listmapper把strs集合轉(zhuǎn)成它的長(zhǎng)度屬性值組成的集合,然后再和lengths屬性做比較.

      這是官網(wǎng)上的一個(gè)例子,并不是一個(gè)太好的例子,通過(guò)linq方法同樣能實(shí)現(xiàn),并且這個(gè)方法語(yǔ)義也不是特別清析,在實(shí)際中如果有比較麻煩的問(wèn)題可以考慮下這個(gè)方法.

      例子3

      集合復(fù)雜元素相等性比較
      看以下代碼片段
      [Test] public void DemoTest() { List<Person> studs = new List<Person> { new
      Person {Name = "baidu", Age = 24}, new Person {Name = "sto", Age = 32}, new
      Person {Name = "tencent", Age = 12}, new Person {Name = "alibaba", Age = 32} };
      List<Person> students = new List<Person>() { new Person {Name = "baidu", Age =
      24}, new Person {Name = "sto", Age = 32}, new Person {Name = "tencent", Age =
      12}, new Person {Name = "alibaba", Age = 32} }; }

      以上兩個(gè)集合的元素都是Person實(shí)例,并且它們包含的對(duì)應(yīng)元素名稱和age都要等,如果只要Name和Age相等就認(rèn)為兩個(gè)Person元素相等,我們?nèi)绾闻袛嘁陨蟽蓚€(gè)集合是否相等呢?

      請(qǐng)看以下方法
      [Test] public void DemoTest() { List<Person> studs = new List<Person> { new
      Person {Name = "baidu", Age = 24}, new Person {Name = "sto", Age = 32}, new
      Person {Name = "tencent", Age = 12}, new Person {Name = "alibaba", Age = 32} };
      List<Person> students = new List<Person>() { new Person {Name = "baidu", Age =
      24}, new Person {Name = "sto", Age = 32}, new Person {Name = "tencent", Age =
      12}, new Person {Name = "alibaba", Age = 32} }; Assert.That(studs,
      Is.EqualTo(students).Using(new StudentEqualityComparer())); }
      以上代碼測(cè)試通過(guò),我們看以上代碼,EqualTo后面串了Using方法,這個(gè)方法里接受IComparer,Icomparer
      ,IEqualityComparer,Comparison委托,Func<T,T,bool>委托等豐富的比較器

      下面我們把StudentEqualityComparer比較器的代碼貼出來(lái)
      public class PersonEqualityComparer : IEqualityComparer<Person> { public bool
      Equals(Person x, Person y) { if (x == null || y == null) return false; return
      x.Name == y.Name && x.Age == y.Age; } public int GetHashCode(Person obj) { if
      (obj.Name == null) { return 0; } return obj.Name.GetHashCode(); } }

      友情鏈接
      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>
          亚洲AV无码乱码在线观看性色 | 日韩精品一级视频 | 国产精品久久久久久久久动漫 | 麻豆精品一区二区三区的成功之道 | 一区二区在线免费 | 操逼观看 | 欧美日操 | 午夜性爱福利视频 | 美国式禁忌14观看中文 | 色婷婷wAV秘 一区二区 |