NUnit學習筆記之進階篇

來源:互聯網
上載者:User

一、概述
  NUnit是一款優秀的開源迴歸測試架構,我在《NUnit學習筆記》一文中已對其基本使用方法進行了簡單的介紹。但除了TestFixture、TestFixtureSetUp、Test和TestFixtureTearDown這四個常用的屬性外,NUnit還提供了ExpectedException、Ignore、Suite、Category和Explicit等屬性用於測試。本文的目的就是對這些屬性進行介紹。
在介紹開始之前,還需要說明一些事情,即本文只提供了C#程式碼範例,而沒有提供VB、J#或Delphi程式碼範例,而且在樣本的編寫過程中雖然也使用了Visual Studio.net 2003和Delphi 2005作為編輯器,但文中絕不會涉及項目建立的內容。此外本文的樣本都是在NUnit可視化環境下測試的,對於其運行效果,如無必要,本文將僅以文字形式進行說明。
二、ExpectedException
  ExpectedException屬性用於測試是否會拋出指定的異常,若拋出則NUnit的狀態條為綠色,反之為紅色。
  範例程式碼:
  using System;
  using NUnit.Framework;
  
  namespace NUnitTest
  {
    [TestFixture]
    public class Test1
    {
      [Test]
      [ExpectedException(typeof(Exception))]
      public void TestExpectedException()
      {
        string s = "";
        if (s != "")
          throw new Exception();
      }
    }
  }
  測試效果:狀態條為紅色。
  具體說明:由於字串s在初始化時已賦值為"",因此在判斷"s != """時條件自然不會成立,這樣就不會拋出異常,狀態條當然也就不會為綠色了。如果想讓狀態條顯示為綠色,將判斷條件改為"s == """就可以了。
三、Ignore
  Ignore屬性可以供類和方法使用,使用後類或方法在NUnit測試中會被忽略,也就是說,對於暫時不想啟動並執行測試類別或測試方法,可以通過Ignore屬性將其忽略掉。
  範例程式碼1:
  [TestFixture]
  [Ignore("class test ignore")]
  public class Test2
  {
    [Test]
    public void TestIgnore()
    {}
  }
  範例程式碼2:
  [TestFixture]
  public class Test2
  {
    [Test]
    [Ignore("function test ignore")]
    public void TestIgnore()
    {}
  }
  測試效果:兩個樣本被執行後狀態條都會顯示為黃色。但如果你在測試時選擇的是Test2節點,就會發現樣本一執行後,只有Test2節點前的圓點顯示為黃色,狀態條沒有發生任何變化,而樣本二則會將Test2和TestIgnore節點前的圓點都變成黃色,狀態條也顯示成黃色。這是由於前者忽略的是整個類的測試,而後者忽略的只是測試方法。
四、Suite
  根據NUnit文檔的說明,Suite屬性是用來標記傳回型別為NUnit.Core.TestSuite的類屬性成員的,該類屬性成員所返回的對象會包含一組測試類別,也就是說Suite屬性其實是用來組織一組測試類別的。那麼組織這些測試類別到TestSuite對象中有何用呢?其實在早期的NUint當中,提供有NUnit.TextUI.TestRunner類,該類有個Run方法,參數就是TestSuite對象,通過該方法可以在代碼中調用NUnit環境,從而運行TestSuite對象中的測試類別。不過現在NUnit似乎已經不再使用這種方式了,故此對於Suite屬性這裡不再介紹。
五、Category
  Category屬性用於將測試類別和測試方法分組,從而使測試類別和測試方法可以分組進行測試。
  範例程式碼1:
  [TestFixture]
  [Category("Class1")]
  public class Test31
  {
    [Test]
    public void Test()
    {}
  }
  
  [TestFixture]
  [Category("Class1")]
  public class Test32
  {
    [Test]
    public void Test()
    {}
  }
  
  [TestFixture]
  [Category("Class2")]
  public class Test33
  {
    [Test]
    public void Test()
    {}
  }
  
  [TestFixture]
  [Category("Class2")]
  public class Test34
  {
    [Test]
    public void Test()
    {}
  }
  範例程式碼2:
  [TestFixture]
  public class Test3
  {
    [Test]
    [Category("m1")]
    public void Test11()
    {}
    
    [Test]
    [Category("m1")]
    public void Test12()
    {}
    
    [Test]
    [Category("m2")]
    public void Test21()
    {}
    
    [Test]
    [Category("m2")]
    public void Test22()
    {}
  }
  測試效果:樣本一中編寫了四個類,被分為Class1和Class2兩個組;樣本二中編寫了四個方法,被分成了m1和m2兩個組。對於這種分組的測試,要想看出效果,在開啟NUnit後,需要先在Categories選項卡中作出選擇,如所示:


可以看到,所有的組預設都在上邊的Available Categories列表框中,選中的組則通過Add按鈕添加到下邊的Selected Categories列表框中,NUnit允許選中多個。測試完成後對於不想要的組,還可以通過Remove按鈕放回到上邊。選好後,點擊Run按鈕,再選擇Tests選項卡,效果如:


可以看到,只有與Class1編組對應的Test31和Test32這兩個類被測試了。
六、Explicit
  Explicit屬性與Ignore屬性有些類似,也是用於對暫時不想啟動並執行測試類別或測試方法做忽略的。但與Ignore屬性相比還有兩點差別:一個是Explicit屬性不需要說明資訊,一個是使用Explicit屬性做忽略的類或方法在NUnit中被選中後,將不再被忽略,而是進行測試。
  範例程式碼1:
  [TestFixture]
  public class Test4
  {
    [Test, Explicit]
    public void TestMethod()
    {}
  }
  範例程式碼2:
  [TestFixture, Explicit]
  public class Test42
  {
    [Test]
    public void TestMethod()
    {}
  }
  測試效果:樣本一所忽略的是方法,若不在NUnit中選中該方法,測試後該方法前的圓點為黃色,即在測試中被忽略,若選中了則在測試後顯示為綠色或紅色,這與測試的結果有關;樣本二所忽略的是類,效果與樣本一類似。
七、小結
  NUnit是一款優秀的測試載入器,提供了強大而靈活的功能,從而使開發人員可以輕鬆搞定代碼測試。但NUnit畢竟只是一款工具,如何編寫測試案例才是關鍵所在。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.