2012-06-28 47 views
1

這裏只是一些示例代碼,但我有我想測試函數的字符串列表。我不喜歡的部分是,當第一個Assert失敗時,NUnit停止在每個測試中。我想測試每個值並報告每個失敗,而不是僅僅是第一個失敗。我不想爲每個字符串寫一個新的[Test]函數。如何讓NUnit測試列表中的所有值,而不僅僅是第一次失敗

有沒有辦法做到這一點?

using NUnit.Framework; 
using System.Collections.Generic; 

namespace Examples 
{ 
    [TestFixture] 
    public class ExampleTests 
    { 
     private List<string> validStrings = new List<string> { "Valid1", "valid2", "valid3", "Valid4" }; 
     private List<string> invalidStrings = new List<string> { "Invalid1", "invalid2", "invalid3", "" }; 

     [Test] 
     public void TestValidStrings() 
     { 
      foreach (var item in validStrings) 
      { 
       Assert.IsTrue(item.Contains("valid"), item); 
      } 
     } 

     [Test] 
     public void TestInvalidStrings() 
     { 
      foreach (var item in invalidStrings) 
      { 
       Assert.IsFalse(item.Contains("invalid"), item); 
      } 
     } 
    } 
} 

回答

3

使用[TestCaseSource]屬性指定的值傳遞到你的(現在的參數)的測試方法。

我們用這個a lot in Noda Time來測試很多具有不同文化和字符串的情況。

這裏是你的榜樣,改作它用:

using NUnit.Framework; 
using System.Collections.Generic; 

// Namespace removed for brevity  
[TestFixture] 
public class ExampleTests 
{ 
    private List<string> validStrings = new List<string> 
     { "Valid1", "valid2", "valid3", "Valid4" }; 
    private List<string> invalidStrings = new List<string> 
     { "Invalid1", "invalid2", "invalid3", "" }; 

    [Test] 
    [TestCaseSource("validStrings")] 
    public void TestValidStrings(string item) 
    { 
     Assert.IsTrue(item.Contains("valid"), item); 
    } 

    [Test] 
    [TestCaseSource("invalidStrings")] 
    public void TestInvalidStrings(string item) 
    { 
     Assert.IsFalse(item.Contains("invalid"), item); 
    } 
} 

注意,另一種選擇是使用[TestCase]這意味着你不需要爲您的測試數據不同的變量。

+0

我正在使用NUnit 2.4,所以我需要更新到2.5/2.6來得到這個。謝謝 – slolife

相關問題