2012-11-21 15 views
5

लक्ष्य:TestContext.TestName संपत्ति कभी नहीं बदलता

मैं इतना है कि मेरी [TestCleanup] समारोह हमारे bespoke को परिणाम लॉग इन कर सकते परीक्षण भागा जा रहा है के नाम निकालने के लिए TestContext.TestName संपत्ति का उपयोग करना चाहते परिणाम भंडार, स्वचालित रूप से जब प्रत्येक परीक्षण पूरा होता है।

समस्या:

यहां तक ​​कि मेरी मूल 'मानसिक स्वास्थ्य की जांच' परीक्षण परियोजना है कि 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 मुझे hove के लिए विशुद्ध रूप से देखते हैं माउस को ऊपर और मूल्य/गुणों का निरीक्षण करें, आदि]]

_ctx.TestName परीक्षणों के चलाने में पहले परीक्षण के नाम से कभी भी परिवर्तन नहीं होता है, यानी यदि मैं सभी पांच परीक्षण ('TestMethod1' चलाने के लिए था, 'TestMethod2', 'TestMethod3', आदि) वे सभी मेरे परिणाम भंडार में 'testMethod1' को उनके testname के रूप में लॉग करते हैं। अलग-अलग परीक्षणों को चलाने से यह ठीक काम करता है, लेकिन यह मेरे लिए उपयोग नहीं है क्योंकि मुझे अपने आवेदन के खिलाफ 10/100/1000 के परीक्षण चलाने में सक्षम होना चाहिए और testContext टेस्टनाम या मुझे संभाल लें।

मैंने कई बार कोशिश की है और इंटरनेट लोड की खोज की है और इस समस्या के साथ कोई और नहीं है, इसलिए मैं या तो हूं: इस समस्या के साथ अद्वितीय, 'Google-Fu' कौशल खराब है, या कुछ कर रहा हूँ असली बेवकूफ उम्मीद है कि यह समझ में आता है और किसी के पास जवाब है।

अग्रिम धन्यवाद,

एंडी

उत्तर

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' विधि गलत हस्ताक्षर का उपयोग कर रही है (यह पैरामीटर स्वीकार नहीं कर सकता है)। पृथ्वी पर क्यों 'कक्षा प्रारंभ करें' एक संदर्भ लेगा यदि वह परीक्षण विधि के लिए बाध्य होना चाहिए, न कि पूरे वर्ग में? क्यों 'TestInitialize' एक संदर्भ स्वीकार नहीं करता है? यदि 'ClassInitialize' पैरामीटर के रूप में' TestContext' लेता है, तो हम कैसे अनुमान लगा सकते हैं कि हमें एक संपत्ति जोड़ने की आवश्यकता है? अविश्वसनीय रूप से गैर-सहज ज्ञान युक्त। – fernacolo

-1

MSTest.exe आउटपुट उत्पादन एक .trx (xml) आप की पूरी परिणामों के साथ फ़ाइल का परीक्षण, नाम, पारित कर दिया करने के लिए विन्यस्त किया जा सकता या किसी से विफल रही है और उत्पादन उन परीक्षण की, वहाँ भी एक उपकरण HTML के लिए http://trxtohtml.codeplex.com/

आशा TRX फ़ाइल को रूपांतरित करने में मदद करता है इस

संबंधित मुद्दे