2015-06-12 114 views
3

我希望我的單元測試基於NUnit框架在Visual Studio測試資源管理器中名稱更具人性化。更改NUnit測試名稱

例如,而不必Test_Case_1TestCase1我會更好地有(從[Category]通過分配屬性值以及)像Test Case #1, Category: First, Category: Second,用空格和方法名不允許的字符。

我知道這是xUnit的開箱即用功能,但我無法參與它,因爲我正在使用我無法使用xUnit框架實現的自定義設置。

是否可以用NUnit重寫單元測試顯示名稱?到目前爲止,我可以看到,FullName字段TestDetail有私人二傳手。

是否有其他方式或方法更改NUnit測試的顯示名稱?

回答

2

如果您正在使用參數化測試,則支持此功能,您可以在添加TestCase屬性時指定TestName

如果你不使用TestCase,那麼你可以用它作爲一個不太理想的工作來實現你想要做的事情。所以,你會宣稱你的測試是這樣的:

[TestCase(null,TestName="Test Case #1, Category: First, Category: Second")] 
public void TestCase(object ignored) 

這是不理想的,因爲它讓你不得不手動鍵入測試名稱,而不是從對測試方法的屬性生成它不是編程。您還必須將參數傳遞給該方法,這就是ignorednull。當然,您可以開始使用參數化測試,在這種情況下,您會將實際值傳遞給您的測試。

[TestCase(5,TestName="Test Case #1, Category: First, Category: Second")] 
public void TestCase(int someInput) { 
    Assert.AreEqual(5, someInput); 
} 
+0

你說的沒錯......這是目前唯一可行的辦法。不過,我已經提交[問題]( https://github.com/nunit/nunit/issues/688),所以也許默認行爲在將來會改變。 – shytikov

2

您可以創建自己的名稱屬性:

// I used the same namespace for convenience 
namespace NUnit.Framework 
{ 
    public class NameAttribute : NUnitAttribute, IApplyToTest 
    { 
     public NameAttribute(string name) 
     { 
      Name = name; 
     } 

     public string Name { get; set; } 

     public void ApplyToTest(Test test) 
     { 
      test.Properties.Add("Name", Name); 
     } 
    } 
} 

然後你使用它像一個普通的NUnit的屬性(就像類別和說明)。

[Test, Name("My Awesome Test"), Category("Cool.Tests"), Description("All cool tests")] 
public void Test313() 
{ 
    // Do something 
} 

您可以看到的數據在你的TestContext:

if (TestContext.CurrentContext.Test.Properties.ContainsKey("Name")) 
{ 
    name = TestContext.CurrentContext.Test.Properties.Get("Name") as string; 
}