2008-09-04 56 views
5

我希望能夠向單元測試添加「消息」,使其實際出現在由NUnit生成的TestResult.xml文件中。例如,這是目前所產生:向NUnit的TestResult.xml文件添加更多信息

<results> 
    <test-case name="MyNamespace.Tests.MyTest" executed="True" success="True" time="0.203" asserts="4" /> 
</results> 

我想能夠有一個額外的屬性(或節點視情況而定),如:

<results> 
    <test-case name="MyNamespace.Tests.MyTest" executed="True" success="True" time="0.203" asserts="4" message="Tested that some condition was met." /> 
</results> 

的想法是,上面的「消息」會以某種方式在測試方法本身中定義(在我的情況下,在運行時生成)。是否有某個地方我可以做這樣的事情?

回答

2

這可能是錯過了一點,但如何命名測試,以便表明他們測試的內容 - 那麼您甚至可能不需要該消息。

如果它證明是絕對必要的,我認爲你需要生產你自己的testrunner,它可以(從我的頭頂開始)讀取TestCase附加屬性並將其附加到輸出。

+0

您確定我需要做一些反射魔術,並在運行時動態創建和命名測試,或者我必須創建一個自定義測試運行器。 – 2009-01-29 16:02:45

+0

你並不完全脫離基地。但是,我希望添加到TestResult.xml中的測試條件通常在運行時才知道。現在我只需Console.WriteLine他們。這些測試可能更適合稱爲「測試跑步者」,其中只有一些最終狀態值被實際聲明。我想我可以通過這些相同的方式動態地創建這些測試方法並使用反射來命名,但我認爲這已經開始過度了。:-)然而,我會繼續調查創建一個TestRunner。 – 2008-09-04 20:17:26

0

我在運行時看不到任何可用的內容,但您可能想要調查一些功能:Description屬性和Property屬性都將文本添加到XML輸出文件。不幸的是,它們都是在編譯時定義的。

5

在最近NUnit的釋放,你可以這樣做:

Assert.AreEqual(250.00, destination.Balance, "some message here"); 

其中,「這裏有些信息」可以是常量消息或在運行時生成並存儲在一個字符串變量的消息。如果斷言失敗,這些消息只會出現在輸出中。但是,通常情況下,您只需要關於失敗測試的信息,因此我建議通過添加每個先前的消息來構建一個字符串,然後將該字符串變量用作所有斷言中的消息。這使您可以從失敗的測試中獲取所需的全部信息。

0

您可以使用TestContext輕鬆寫出您想要的任何消息。這是我的設置。

我的每個測試都是從testbase類繼承而來的。這刪除了多餘的代碼。

[TestFixture] 
public class TestBase 
{ 

    public IWebDriver driver; 

    //[OneTimeSetUp] and [OneTimeTearDown] go here if needed 

    [SetUp] 
    public void Setup(){ 
     driver = Shortcuts.SetDriver("my browser"); 
    } 

    [TearDown] 
    public void TearDown() 
    { 
     driver.Quit(); 
     Comment("@Result: " + TestContext.CurrentContext.Result.Outcome.ToString()); 
    } 

    public void Comment(string _comment) 
    { 
     TestContext.Out.WriteLine(_comment); 
    } 
    public void Error(string _error) 
    { 
     TestContext.Error.WriteLine(_error); 
    } 

} 

你可以看到底部的兩個函數寫出了所有TestContext中的消息或錯誤。這也可以在平行測試中很好地工作。

然後,我可以使用該父類來設置我的測試,並寫入我的控制檯。

//Role Management 
public class RoleManagementTests : TestBase 
{ 
    [TestCase] 
    public void RoleManagement_7777_1() 
    { 
     Comment("Expected: User has the ability to view all roles in the system."); 
     //Test goes here 
    } 
} 

現在,您可以在輸出(Visual Studio)和使用NUnit Console Runner的TestResult.xml中看到結果。