2009-09-02 14 views
13

क्या एमएसयूनीट में वर्टिंग का एक एमएसटेस्ट समतुल्य है?mstest में assert.warning के बराबर?

+0

अच्छा प्रश्न: परीक्षण के बाद मार दिया गया है, लेकिन एक UnitTestWarningException के साथ विफल है कि आपके चेतावनी दिखाता है। एमएसएफटी ने मौजूदा यूनिट परीक्षण मानकों को त्यागने का फैसला किया और बदले में कुछ बदमाश के साथ आया। –

उत्तर

13

निकटतम मैच Assert.Inconclusive() है - यह परीक्षण परीक्षण विफल नहीं करता है, लेकिन यह भी सफल नहीं होता है। यह अनन्य नामक तीसरे चरण में पड़ता है।

एक एकल अनन्य परीक्षण एक संपूर्ण परीक्षण सूट अनिश्चित होने का कारण बनता है।

रूप में अच्छी तरह कस्टम संदेशों का समर्थन करने भार के होते हैं:

Assert.Inconclusive("Ploeh"); 
+6

कष्टप्रद, एक अनिवार्य परीक्षण MSTEST.EXE को एक ही स्थिति कोड (1) को असफल होने के कारण पर्याप्त करने के लिए पर्याप्त है, इसलिए यदि आप इसे बंद करने के लिए बैच फ़ाइल का उपयोग कर रहे हैं तो आप अंतर नहीं बता पाएंगे बिना काम के। –

3

मैं एक ऐसी ही समस्या आ रही है के रूप में मैं कुछ परियोजनाओं के लिए NUnit का उपयोग करें।

Console.Write("Some Warning"); 
+3

जोर दें। अनन्य(); वास्तव में NUnit द्वारा समर्थित है। http://www.nunit.org/index.php?p=utilityAsserts&r=2.5.8 –

1

यहाँ है उपयोग करने का प्रयास मेरी हैक कैसे nunit (मुझे पता है इस सवाल के बारे MSTest था, लेकिन यह भी काम करना चाहिए) के साथ चेतावनियां होती है पर। हमेशा की तरह, मुझे किसी भी सुधार में रूचि है। यह विधि मेरे लिए काम कर रही है।

पृष्ठभूमि: मेरे पास कोड है जो परीक्षणों को सही टिप्पणियों के लिए जांचता है और यह पता लगाने के लिए तर्क है कि किसी ने टिप्पणी बदलने के बिना किसी अन्य परीक्षण की प्रतिलिपि बनाई है और चिपकाया है या नहीं। ये चेतावनियां मैं सामान्य Assert के बिना डेवलपर को दिखाना चाहता हूं। वास्तविक परीक्षण को चलने से वास्तविक परीक्षण अवरुद्ध करना शामिल है। कुछ परीक्षण पर ध्यान केंद्रित कर रहे हैं और सफाई रिफैक्टरिंग चरण चेतावनियों को हटाने के लिए है।

मिशन: अन्य सभी आवेषण चलाने के बाद चेतावनियां होने के लिए। इसका मतलब है कि आर्टर्ट के बाद चेतावनियां भी दिख रही हैं। सामान्य रूप से विकास के दौरान परीक्षणों में होने वाली विफलता।

कार्यान्वयन: (सबसे अच्छा सभी परीक्षण फ़ाइलों के लिए एक आधार वर्ग बनाने के लिए):

public class BaseTestClass 
{ 
    public static StringBuilder Warnings; 

    [SetUp] 
    public virtual void Test_SetUp() 
    { 
      Warnings = new StringBuilder(); 
    } 

    [TearDown] 
    public virtual void Test_TearDown() 
    { 
     if (Warnings.Length > 0) 
     { 
      string warningMessage = Warnings.ToString(); 

      //-- cleared if there is more than one test running in the session 
      Warnings = new StringBuilder(); 
      if (TestContext.CurrentContext.Result.Status == TestStatus.Failed) 
      { 
       Assert.Fail(warningMessage); 
      } 
      else 
      { 
       Assert.Inconclusive(warningMessage); 
      } 
     } 
    } 

परीक्षण प्रयोग

[Test] 
public void Sample_Test() 
{ 
    if (condition) Warning.AppendLine("Developer warning"); 
    Assert.Fail("This Test Failed!"); 
} 

वास्तविक परिणाम:

"This Test Failed!" 
"Developer warning" 

परीक्षण की स्थिति असफल रही है - लाल

यदि परीक्षण पास हो गया और एक चेतावनी थी, तो आपको अनन्य - येलो की स्थिति मिल जाएगी।

0

आप एक कस्टम अपवाद का उपयोग करना चाह सकते हैं।

Assert के साथ समस्या। अनन्य यह है कि टेस्ट एक्सप्लोरर का कहना है कि परीक्षण भी नहीं चला था। यह भ्रामक हो सकता है जब भविष्य में परीक्षण चल रहा है, खासकर अगर परीक्षण अन्य डेवलपर्स द्वारा चलाया जाता है:

enter image description here

तरह से मैं पसंद करते हैं पर आए हैं इस प्रकार है। सबसे पहले, एक कस्टम UnitTestWarningException परिभाषित करें। मैंने अपना अतिरिक्त कन्स्ट्रक्टर दिया है, इसलिए मैं अपना चेतावनी संदेश स्ट्रिंग पास कर सकता हूं।तर्क के साथ स्वरूप शैली:

public class UnitTestWarningException : Exception 
{ 
    public UnitTestWarningException(string Message) : base(Message) { } 

    public UnitTestWarningException(string Format, params object[] Args) : base(string.Format(Format, Args)) { } 
} 

फिर, बिंदु जहाँ आप एक चेतावनी के साथ एक इकाई परीक्षण समाप्त करना चाहते हैं पर, फेंक एक UnitTestWarningException बजाय:

[TestMethod] 
public void TestMethod1() 
{ 
    . 
    . 
    . 
    try 
    { 
    WorkflowInvoker.Invoke(workflow1, inputDictionary); 
    } 
    catch (SqlException ex) 
    { 
    if (ex.Errors.Count > 0 
     && ex.Errors[0].Procedure == "proc_AVAILABLEPLACEMENTNOTIFICATIONInsert") 
    { 
     //Likely to occur if we try to repeat an insert during development/debugging. 
     //Probably not interested--the mail has already been sent if we got as far as that proc. 

     throw new UnitTestWarningException("Note: after sending the mail, proc_AVAILABLEPLACEMENTNOTIFICATIONInsert threw an exception. This may be expected depending on test conditions. The exception was: {0}", ex.Message); 
    } 
    } 
} 

परिणाम: टेस्ट एक्सप्लोरर तो पता चलता है कि

enter image description here

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