• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
  • 單元測試和回歸測試

    發表于:2015-03-27來源:uml.org.cn作者:SoftwareTeacher點擊數: 標簽:單元測試
    這一章講的是兩人合作,既然程序是兩個人寫的,那就會出現一個人寫的模塊被另一個人寫的模塊調用的情況。很多誤解、疏忽都發生在兩個模塊之間。如何能讓自己寫的模塊盡量無懈

      你的RP是由你的程序質量決定的。

      ——阿超

      這一章講的是兩人合作,既然程序是兩個人寫的,那就會出現一個人寫的模塊被另一個人寫的模塊調用的情況。很多誤解、疏忽都發生在兩個模塊之間。如何能讓自己寫的模塊盡量無懈可擊?單元測試就是一個很有效的解決方案。

      1、用VSTS寫單元測試

      例子:我們寫一個比較常用的類型,看看它的單元測試應該怎么寫?比如在各種網站應用程序中都會用到的“用戶”這一類型。誰自告奮勇上來表演一下寫代碼?小飛,好,請上臺。

      小飛創建了一個C#的類庫(Class Library),并寫了如代碼清單11-1的代碼:

      代碼清單11-1

      namespace DemoUser

      {

      public class User

      {

      public User(string userEmail)

      {

      m_email = userEmail;

      }

      private string m_email; //user email as user id

      }

      }

      好,現在右鍵選中User,就可以看到“Create Unit Tests”的菜單,這樣就可以創建新的單元測試(如圖11-2所示)。

      圖11-2 創建單元測試項目

      創建單元測試后,注意到在Solution Explorer中出現了三個新的文件(如圖11-3所示)。

      圖11-3 新的單元測試文件

      Class1.cs是程序的文件,而Class1Test.cs是與之對應的單元測試文件。

      DemoUser.vsmdi:測試管理文件。

      Localtestrun.testrunconfig:本地測試運行設置文件。

      如何管理設置文件呢?右鍵再選屬性(Property)并不對。你得雙擊文件才能進入管理及設置界面。在設置界面中,你可以讓單元測試產生“demouser.dll”的代碼覆蓋報告。

      注意在單元測試中,VSTS自動為你生成了測試的骨架,但是你還是要自己做不少事情,最起碼要把那些//TODO的事情給做了(如代碼清單11-2所示)。在這個時候,單元測試還都是用的Assert. Inconclusive,表明這是一個未經驗證的單元測試。

      代碼清單11-2

      ///

      ///A test for User (string)

      ///

      [TestMethod()]

      public void ConstructorTest()

      {

      string userEmail = null; // TODO: Initialize to an appropriate

      // value

      User target = new User(userEmail);

      // TODO: Implement code to verify target

      Assert.Inconclusive("TODO: Implement code to verify target");

      }

      進行簡單的修改后,我們得到了一個如代碼清單11-3正式的單元測試:

      代碼清單11-3

      [TestMethod()]

      public void ConstructorTest()

      {

      string userEmail = "someone@somewhere.com";

      User target = new User(userEmail);

      Assert.IsTrue(target != null);

      }

      //我們還可以進一步測試E-mail是否的確是保存在User類型中。

      解釋單元測試的結構

      從上面這個例子可以看到創建單元測試函數的主要步驟:

      (1)設置數據(一個假想的正確的E-mail地址);

      (2)使用被測試類型的功能(用E-mail地址來創建一個User類的實體);

      (3)比較實際結果和預期的結果(Assert.IsTrue(target != null);)。

      現在可以運行單元測試了,同時可以看看代碼覆蓋報告“code coverage report”,代碼百分之百地都被覆蓋了。

      當然這時候的代碼還有很多情況沒有處理,同學們在臺下雜曰——

      處理空的字符串,長度為零的字符串,都是空格的串……

      小飛熟練地用Copy/Paste又寫了下面的三個測試,如代碼清單11-4所示。

      代碼清單11-4

      [TestMethod()]

      [ExpectedException(typeof (ArgumentNullException))]

      public void ConstructorTestNull()

      {

      User target = new User(null);

      }

      [TestMethod()]

      [ExpectedException(typeof(ArgumentException))]

      public void ConstructorTestEmpty()

      {

      User target = new User("");

    原文轉自:http://www.kjueaiud.com

    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>