2012-11-21 60 views
5

目標:的TestContext.TestName財產永遠不會改變

我想用TestContext.TestName屬性提取試驗是RAN的名字,這樣我的[TestCleanup]功能可以登錄的結果對我們的定製結果存儲庫,當每個測試完成時自動執行。

問題:

即使在我基礎「合理性檢查」,其中包含5次測試類似於下面的結構測試項目:

[TestMethod] 
public void TestMethodX() 
{ 
    Console.WriteLine(String.Format("In Test '{0}'",_ctx.TestName)); 
    Assert.IsTrue(true); 
} 

一類「初始化」像下面這套_ctx對我來說:

[ClassInitialize] 
public static void ClassInit(TestContext Context) 
{ 
    _ctx = Context; 
    Console.WriteLine("In ClassInit()"); 
} 

[注:Console.WriteLines純粹是對我有給掀掉將鼠標懸停並檢查數值/屬性等]]

_ctx.TestName從未在測試運行中更改第一個測試的名稱,即如果我要運行所有五個測試('TestMethod1', 「TestMethod2」,「TestMethod3」,等等),他們所有的日誌「TestMethod1」他們在我的結果貯存庫測試名稱。 運行測試單獨它工作正常,但是這是沒有用的給我,因爲我需要能夠運行10的/ 100的/ 1000的對我的應用程序測試的,並且具有的TestContext處理測試名或我。

現在我已經嘗試了幾次,並在網上搜索負載和沒有任何人有這個問題,所以我可以:這個問題唯一的,有差「谷歌賦的技能,或者是做什麼真正愚蠢。希望這是有道理的,有人有答案。

由於提前,

安迪

回答

7

因爲[ClassInitialize]是整個試運行,你只執行一次,這是發生的工具在那裏初始化_ctx。使用[TestInitialize]代替,這是每個測試方法之前執行並覆蓋TestContext Class

[TestClass] 
public class TestClass 
{ 
    public TestContext TestContext { get; set; } 

    [TestInitialize] 
    public void Initialize() 
    { 
     // Runs once before each test method and logs the method's name 
     Console.WriteLine(TestContext.TestName); 
    } 

    [TestMethod] 
    public void TestMethod1() 
    { 
     // Logs the method name inside the method 
     Console.WriteLine(String.Format("In Test '{0}'", TestContext.TestName)); 
    } 

    // ... Your rest test methods here 
} 
+1

感謝您的!完美地工作! :) – Robbo

+0

歡迎您。 – Schaliasos

+0

我得到了類似的問題,那麼我只是改變了'ClassInitialize'到'TestInitialize'取上下文參數。它編譯但測試告訴'TestInitialize'方法使用錯誤的簽名(它不能接受參數)。 爲什麼地球上的'如果這是應該被綁定到測試方法,而不是整個類ClassInitialize'will採取情境?爲什麼'TestInitialize'不接受上下文?如果'ClassInitialize'接受'TestContext'作爲參數,我們怎麼能猜測我們需要添加一個屬性? 令人難以置信的不直觀。 – fernacolo

-1

MSTest.exe輸出可配置輸出帶有.trx(XML)與您的完整結果文件測試,名稱,通過或任何失敗和輸出這些試驗的,也有到TRX文件轉換爲HTML http://trxtohtml.codeplex.com/

希望這有助於

相關問題