2015-09-15 16 views
8

我使用NUnit 3.0和TestFixtureSource多次使用不同參數/配置(我希望在TestFixture級別執行此操作)在夾具內運行測試用例。簡單的例子:Nunit3如何更改基於從TestFixtureSource傳遞的參數的測試用例名稱

[TestFixtureSource(typeof (ConfigurationProvider))] 
public class Fixture 
{ 
    public Fixture(Configuration configuration) 
    { 
     _configuration = configuration; 
    } 

    private Configuration _configuration; 

    [Test] 
    public void Test() 
    { 
     //do something with _configuration 
     Assert.Fail(); 
    } 
} 

假設測試()失敗的配置之一,併成功爲另一個。在運行報告文件和Visual Studio的測試資源管理器中,失敗和成功運行的名稱都將顯示爲Test(),它並不告訴我關於哪個設置導致問題的任何信息。

在這種情況下是否有影響測試用例名稱的方法(即每個燈具運行/配置的前綴名稱)?作爲解決方法,我正在打印到每個測試用例觸發前的結果輸出,但我寧願避免這樣做。

由於NUnit 3.0處於測試階段,此功能相當新,所以我無法在文檔中找到任何內容。我發現TestCaseData,但我認爲它不適合與夾具一起使用(它是爲測試用例設計的)。

回答

2

我無法找到更改測試名的方法,但它不應該是必需的,因爲NUnit3通過包含testfixture的描述來構造測試名。

Fixture從這個問題可以用不變,如果ConfigurationConfigurationProvider有這樣一個實現的例子:

public class Configuration 
{ 
    public string Description { get; } 

    public Configuration(string description) 
    { 
     Description = description; 
    } 

    public override string ToString() 
    { 
     return Description; 
    } 
} 

public class ConfigurationProvider : IEnumerable 
{ 
    public IEnumerator GetEnumerator() 
    { 
     yield return new Configuration("Foo"); 
     yield return new Configuration("Bar"); 
     yield return new Configuration("Baz"); 
    } 
} 

「特技」是確保構造函數參數的夾具是一個字符串或有一個ToString-方法,給出了一個明智的描述燈具。

如果您在Visual Studio中使用NUnit 3測試適配器,那麼testfixtures將顯示爲Fixture(Foo),Fixture(Bar)Fixture(Baz),因此您可以輕鬆區分它們的測試。從nunit3-console.exe的XML的輸出也使用描述性的名字,FX:執行如下操作fullname=MyTests.Fixture(Bar).Test

<test-case id="0-1003" name="Test" fullname="MyTests.Fixture(Bar).Test" methodname="Test" classname="MyTests.Fixture" runstate="Runnable" result="Failed" ... > 
    <failure> 
     <message><![CDATA[]]></message> 
     <stack-trace><![CDATA[at MyTests.Fixture.Test() in ... ]]></stack-trace> 
    </failure> 
    ... 
</test-case> 

Using NUnit 3 Test Adapter in Visual Studio

0

的一種方式是具有查找和在源代碼替換令牌和動態在執行前使用命令行msbuild建立測試庫。高級別步驟

  1. 源定義測試用例名稱作爲sometest_TOKEN然後使用命令行工具,如fnr.exe replce _TOKEN用任何你喜歡的。例如sometest_build2145
  2. 使用msbuild編譯dll msbuild/t:重建mytestproj.sln。之後執行mytestproj.dll中的所有測試用例。
相關問題