2013-04-08 7 views
13

हम रात के निर्माण को चला रहे हैं जो अंत में एमएसटेस्ट फ्रेमवर्क का उपयोग करके हमारे सभी यूनिटटेस्ट को चलाते हैं।पहली विफलता पर एमएसटेस्ट परीक्षण निष्पादन को कैसे रोकें?

हमारे पास 100% पास दर होनी चाहिए, इसलिए अगर कोई विफल रहता है तो कोई अन्य बात नहीं चल रहा है; इसलिए हम पहले असफल परीक्षण पर निष्पादन को रोकना चाहेंगे।

क्या वैसे भी हम इसे प्राप्त कर सकते हैं?

+0

मैं आ रही हैं एक ही मुद्दा। कोई भी? – Zambonilli

उत्तर

0

क्या आप वाकई वाकई परीक्षण परिणामों को फेंकना चाहते हैं?

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

यदि विफलता के बाद परीक्षण चलाने के लिए आपको बहुत अधिक लागत नहीं है, तो क्या वह जानकारी उपयोगी नहीं है?


यह कहा गया है कि, आपके परीक्षण पुस्तकालयों में एक फिक्स एक साथ हैक करना मुश्किल नहीं होगा। परीक्षण विफलता के सभी संभव codepaths एक विफलता के बाद प्रत्येक परीक्षा को रोकने के लिए एक स्थिर चर StopAssert.Failed = true; (शायद Assert के लिए कॉल लपेटकर और AssertFailedExceptions पकड़ने द्वारा। तो बस जोड़ने [TestInitialize()] प्रत्येक परीक्षा वर्ग के लिए तरीकों की स्थापना की है!

public class StopAssert 
{ 
    public static bool Failed { get; private set; } 

    public static void AreEqual<T>(T expected, T actual) 
    { 
     try 
     { 
      Assert.AreEqual(expected, actual); 
     } 
     catch 
     { 
      Failed = true; 
      throw; 
     } 
    } 

    // ...skipping lots of methods. I don't think inheritance can make this easy, but reflection might? 

    public static void IsFalse(bool condition) 
    { 
     try 
     { 
      Assert.IsFalse(condition); 
     } 
     catch 
     { 
      Failed = true; 
      throw; 
     } 
    } 
} 


[TestClass] 
public class UnitTest1 
{ 
    [TestInitialize()] 
    public void Initialize() 
    { 
     StopAssert.IsFalse(StopAssert.Failed); 
    } 

    [TestMethod] 
    public void TestMethodPasses() 
    { 
     StopAssert.AreEqual(2, 1 + 1); 
    } 

    [TestMethod] 
    public void TestMethodFails() 
    { 
     StopAssert.AreEqual(0, 1 + 1); 
    } 

    [TestMethod] 
    public void TestMethodPasses2() 
    { 
     StopAssert.AreEqual(2, 1 + 1); 
    } 
} 

[TestClass] 
public class UnitTest2 
{ 
    [TestInitialize()] 
    public void Initialize() 
    { 
     StopAssert.IsFalse(StopAssert.Failed); 
    } 

    [TestMethod] 
    public void TestMethodPasses() 
    { 
     StopAssert.AreEqual(2, 1 + 1); 
    } 

    [TestMethod] 
    public void TestMethodFails() 
    { 
     StopAssert.AreEqual(0, 1 + 1); 
    } 

    [TestMethod] 
    public void TestMethodPasses2() 
    { 
     StopAssert.AreEqual(2, 1 + 1); 
    } 
} 
+0

किसी के पास कॉन्फ़िगरेशन सेटिंग्स के साथ ऐसा करने का कोई तरीका है? हमारे पास बहुत सारे कोड हैं जिन्हें संशोधित करने की आवश्यकता होगी :( – Steve

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