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

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

  • <strong id="5koa6"></strong>
  • 如何編寫綜合的單元測試方案(8)

    發表于:2012-06-27來源:伯樂在線作者:李瓊點擊數: 標簽:單元測試
    在測試代碼變得令人迷惑之前,我們可以把它通用化什么程度,這里絕對有個限制。但是一個有意義的測試名稱,并給每個斷言配一個好的描述可以讓你的

      在測試代碼變得令人迷惑之前,我們可以把它通用化什么程度,這里絕對有個限制。但是一個有意義的測試名稱,并給每個斷言配一個好的描述可以讓你的測試更加容易讓人理解。

      控制變量

      目前所有的斷言都只考慮到了測試用例的輸出。他們假設每個Person對象初始狀態已知,然后從此出發進行其他操作。但是如果我們想讓測試更具科學性,必須確保我們能控制變量?;蛘邠Q句話說,我們需要保證,一切在掌握之中。

      請看下面一組斷言:

    1
    2
    3
    4
    Assert.IsFalse(person.HasErrors, "Test setup failed, HasErrors is not false");
     Assert.IsFalse(person.IsChanged, "Test setup failed, IsChanged is not false");
     Assert.AreEqual("Adam", person.FirstName, "Test setup failed, FirstName is not Adam");
     Assert.AreEqual("Smith", person.LastName, "Test setup failed, LastName is not Smith");

      由于我們不想在每個測試的開始重復這些斷言,我們可以選擇把他們移到一個工廠方法中,這樣我們可以保證總是拿到一個干凈的對象。這個同樣適用于重用這些設置去測試其他屬性的測試用例。

      [TestMethod]

    1
    2
    3
    4
    public void Person_FirstName_Set()
     {
     var person = GetAdamSmith();
     ...

      表格式的測試

      之所以走到這一步,是因為“測試方法”的數量跟測試的完善程度沒有關系。它們只是組織和執行測試用例一種比較方便的方式。

      另一個組織大量測試用例的方法是表格驅動測試法。不能執行單個測試,但是僅用一行代碼就可以增加新的測試用例。表格式測試里的表格可以來源于XML的文件,數據庫表,寫死在數組里或者只是使用同一個函數用不同的值反復調用。一些框架如MBTest甚至可以讓你用屬性給出測試用例,但是為了讓例子輕便,我們還是堅持保持最低的共同部分。

      [TestMethod]

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    public void Person_FullName_Tests()
     {
     Person_FullName_Test("Bob", "Jones", "Bob Jones");
     Person_FullName_Test("Bob ", "Jones", "Bob Jones");
     Person_FullName_Test(" Bob", "Jones", "Bob Jones");
     Person_FullName_Test("Bob", " Jones", "Bob Jones");
     Person_FullName_Test("Bob", "Jones ", "Bob Jones");
     Person_FullName_Test(null, "Jones", "Jones");
     Person_FullName_Test(string.Empty, "Jones", "Jones");
     Person_FullName_Test(" ", "Jones", "Jones");
     Person_FullName_Test("Bob", "", "Bob");
     Person_FullName_Test("Bob", null, "Bob");
     Person_FullName_Test("Bob", string.Empty, "Bob");
     Person_FullName_Test("Bob", " ", "Bob");
     }
     private void Person_FullName_Test(string firstName, string lastName, string expectedFullName)
     {
     var person = GetAdamSmith();
     person.FirstName = firstName;
     person.LastName = lastName;
     Assert.AreEqual(expectedFullName, person.FullName,
     string.Format("Incorrect full name when first name is '{0}' and last name is '{1}'"
     firstName ?? "", lastName ?? ""));
     }

    原文轉自: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>