2008-10-22 25 views
9

मैं माइक्रोसॉफ्ट वेबटेस्ट का उपयोग कर रहा हूं और एनयूनीट के Assert.Fail() के समान कुछ करने में सक्षम होना चाहता हूं। सबसे अच्छा मैं throw new webTestException() पर आया हूं लेकिन यह के बजाय परीक्षण परिणामों में Error के रूप में दिखाता है।मैं वेबटेस्ट कैसे विफल कर सकता हूं?

WebTest पर असफलता को इंगित करने के लिए एक निजी सदस्य चर सेट करने के अलावा, क्या मुझे कुछ याद आया है?

संपादित करें: मैंने Assert.Fail() विधि का भी उपयोग किया है, लेकिन यह अभी भी वेबटेस्ट के भीतर उपयोग की जाने वाली विफलता के बजाय त्रुटि के रूप में दिखाई देता है, और Outcome संपत्ति केवल पढ़ने योग्य है (कोई सार्वजनिक सेटटर नहीं है)।

संपादित करें: ठीक है अब मैं वास्तव में स्टंप हूं। मैंने Outcome प्रॉपर्टी को असफल करने के लिए प्रतिबिंब का उपयोग किया लेकिन परीक्षण अभी भी पास हो गया है!

यहाँ कोड को Oucome सेट है कि विफल हुआ:

public static class WebTestExtensions 
{ 
    public static void Fail(this WebTest test) 
    { 
     var method = test.GetType().GetMethod("set_Outcome", BindingFlags.NonPublic | BindingFlags.Instance); 
     method.Invoke(test, new object[] {Outcome.Fail}); 
    } 
} 

और यहाँ कोड है कि मैं असफल कोशिश कर रहा हूँ है:

public override IEnumerator<WebTestRequest> GetRequestEnumerator() 
    { 
     this.Fail(); 
     yield return new WebTestRequest("http://google.com"); 
    } 

Outcome WebTest Oucome.Fail करने के लिए सेट किया जा रहा है लेकिन जाहिरा तौर पर फ्रेमवर्क वास्तव में परीक्षण पास/असफल परिणामों को निर्धारित करने के लिए इसका उपयोग नहीं करता है।

उत्तर

2

निर्धारित करें Outcome propertyको विफल:

Outcome = Outcome.Fail; 

वहाँ भी Microsoft.VisualStudio.QualityTools.UnitTestFramework विधानसभा में एक Assert.Fail() है।

+0

स्पष्ट किया जाना चाहिए था ... मैं था पहले से ही इन दोनों की कोशिश की है। (इसे प्रतिबिंबित करने के लिए संपादित प्रश्न) – craigb

+0

[माइक्रोसॉफ्ट.विज़ुअल स्टूडियो.क्यूविटीटूल्स। वेबटेस्टफ्रेमवर्क, संस्करण = 9.0.0.0] माइक्रोसॉफ्ट। विज़ुअल स्टूडियो। टेस्टटूल। वेबटेस्टिंग। वेबटेस्ट.सेट_ऑक्टकम (माइक्रोसॉफ्ट.विज़ुअल स्टूडियो। टेस्टटूल। वेबटेस्टिंग। आउटपुट वैल्यू) सार्वजनिक –

+0

नहीं है डीएल के अनुसार मैं उपयोग कर रहा हूँ। ओकुम एक सार्वजनिक गेटर है, लेकिन कोई सार्वजनिक सेटटर नहीं है। मैंने set_Ocomecome (जो निजी है) को कैल करने के लिए प्रतिबिंब का उपयोग किया है, लेकिन इसका अभी भी परीक्षण परिणाम पर कोई प्रभाव नहीं पड़ता है (यानी यह विफल नहीं होता है) – craigb

1

परिणाम संपत्ति VSTS में सार्वजनिक सेट 2010 :-)

1

कैसे के बारे में:

Assert.IsTrue(false); 

मैं इसे सत्यापित नहीं किया है, तो यह संभव है यह एक त्रुटि के रूप में रिपोर्ट करने के वैसे ही Assert.Fail() की तरह, और मैं मानता हूं कि यह एक हैक है। लेकिन चूंकि Assert.Fail() उस तरीके से काम नहीं कर रहा है जिस तरह से आप इसकी अपेक्षा करते हैं, और न ही परिणाम सेट कर रहा है, मुझे कोई और विकल्प नहीं दिख रहा है।

1

आप एक सत्यापन नियम जोड़कर हमेशा परीक्षण विफल करते हैं जो हमेशा विफल रहता है।

public class CodedWebTest : WebTest 
{ 
    public override IEnumerator<WebTestRequest> GetRequestEnumerator() 
    { 
     WebTestRequest request1 = new WebTestRequest("http://www.google.com"); 
     FailValidationRule failValidation = new FailValidationRule(); 
     request1.ValidateResponse += new EventHandler<ValidationEventArgs>(failValidation.Validate); 
     yield return request1; 
    } 
} 
0

PostWebTest में परिणाम का मूल्य निर्धारित करें:

public class FailValidationRule : ValidationRule 
{ 
    public override void Validate(object sender, ValidationEventArgs e) 
    { 
     e.IsValid = false; 
    } 
} 

फिर नए सत्यापन नियम आप अपने webtest के ValidateResponse घटना है, इसलिए की तरह देते हैं: उदाहरण के लिए, अगर आप इस तरह एक असफल सत्यापन नियम लिख सकता है आयोजन प्रबंधकर्ता।

1

एक समाधान है कि कथात्मक परीक्षणों में काम करेगा (और साथ ही कोडित) है:

  • एक मान्यता नियम है कि जब एक निश्चित संदर्भ पैरामीटर (जैसे विफल रहता बारे मेंजब आप विफलता ट्रिगर करना चाहते हैं 'असफल') संदर्भ
  • में मौजूद है, प्रसंग पैरामीटर और फोन WebTest.Stop()
  • एक WebTest स्तर के नियम के रूप में मान्यता नियम जोड़ने (नहीं का अनुरोध-स्तर) सेट ताकि यह सभी अनुरोधों पर चलता है

मुझे लगता है कि यह उतना संक्षिप्त है जितना किया जा सकता है।

1

सबसे पहले, मैं वीबीनेट के साथ काम कर रहा हूं, लेकिन मैंने यह पता लगाने से पहले असफल होने के परिणाम को भी सेट करने की कोशिश की कि यह काम नहीं करता है (जो मुझे यहां लाया)।

मैं अंत में सिर्फ एक अपवाद फेंक कर यह करने के लिए कामयाब रहे:

Public Overrides Sub PostRequest(ByVal sender As Object, ByVal e As PostRequestEventArgs) 

    If YourTest = True Then 

     Throw New WebTestException("My test Failed") 

    End If 

    MyBase.PostRequest(sender, e) 

    End Sub 

मैं जानता हूँ कि इस विषय पुराना है लेकिन मुझे आशा है कि यह किसी भी तरह मदद करता है :)

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