2017-01-27 7 views
6

उदाहरण के लिए कई मामलों का परीक्षण करने के लिए यह संभव है:एक विधि पर विभिन्न मामलों के साथ आवेषण परीक्षण कैसे लिखें और उनमें से सभी अलग-अलग प्रतिक्रिया मामलों की तुलना करते समय पास हो जाएं?

[TestCase(""), TestCase(null), TestCase("String"), TestCase("2010-07-14T00:00:00.000Z"), TestCase("201-07-14T00:00:00.000Z")] 

और जब मैं अपने त्रुटि वस्तु को deserialized json के साथ एपीआई से प्रतिक्रिया हो रही है मुझे लगता है कि प्रतिक्रिया शारीरिक संदेश और HttpStatusCode एपीआई और से अलग सत्यापन के बाद सही है यह मेरे जोर से सही होगा।

विधि जहाँ मैं Json से सामान्य प्रकार के deserializing हूँ:

public TType GetResponseJsonAsObject<TType>(HttpResponseMessage content) 
     { 
       var contentResult = content.Content.ReadAsStringAsync().Result; 
       var specialCase = JsonConvert.DeserializeObject<TType>(contentResult); 
       return specialCase; 
     } 

यहाँ अपने परीक्षण विधि है:,

[TestCase(""), TestCase(null), TestCase("String"), TestCase("2010-07-14T00:00:00.000Z"), TestCase("201-07-14T00:00:00.000Z")] 
     public void PostAPI_SpecialCaseRequestDate_WithError_ProceedsSuccessfully(string date) 
     { 
      // arrange 
      SpecialCaseRequest data = new SpecialCaseRequest() 
      { 
       Name = "Test", 
       ExpirationDateTime = date, 
      }; 

      // act + assert 
      string json = JsonConvert.SerializeObject(data, Formatting.Indented); 
      PostMethods sendJsonDemo = new PostMethods(); 
      var response = sendJsonDemo.SendJsonDemo(json); 
      var responseBody = sendJsonDemo.GetResponseJsonAsObject<Error>(response); 
      Assert.IsNotNull(responseBody); 

      Assert.AreEqual("Date parameter cannot be empty string", responseBody.Message); 
      Assert.AreEqual("Date parameter cannot be empty null", responseBody.Message); 
     } 

आइडिया एक विधि में सभी मामलों का परीक्षण करने और उन्हें सफलतापूर्वक पारित करने के लिए है, लेकिन इस मामले में यह दूसरे आर्टर्ट पर असफल हो जाएगा, क्योंकि एपीआई प्रतिक्रिया बॉडी संदेश से सत्यापन के बाद यह स्ट्रिंग है: "दिनांक पैरामीटर खाली स्ट्रिंग नहीं हो सकता है" और पहला आर्ट पारित किया जाएगा, लेकिन यह दूसरी आर्टर्ट पर असफल हो जाएगा, क्योंकि प्रतिक्रिया बॉडी। मैसेज एपीआई है: "दिनांक पैरामीटर नहीं कर सकता है खाली स्ट्रिंग बनें "। उसी टेस्टकेस जैसे शून्य या "स्ट्रिंग" और आदि के साथ होगा, क्योंकि TestCase(null) से, यह पहले जोर से असफल हो जाएगा क्योंकि एपीआई प्रतिक्रिया निकाय से सत्यापन के बाद विभिन्न स्ट्रिंग प्रतिक्रिया के साथ आता है। मैसेज = "दिनांक पैरामीटर खाली शून्य नहीं हो सकता है"। प्रत्येक टेस्टकेस के लिए अलग-अलग परीक्षण विधियों के बिना मैं इन आवेषणों को अच्छी तरह से कैसे प्रबंधित कर सकता हूं?

+0

यह आपके testframework पर निर्भर करता है। विजुअलस्टूडियो का एनटीएस्ट कम से कम 2013 तक पैरामीटर परीक्षण नहीं कर सकता है। निंट अलग हो सकता है। पैरामीटर परीक्षणों के संबंध में आपको अपने ढांचे के लिए जानकारी की जांच करनी होगी। –

+0

क्या आप संपत्ति समाप्ति तिथि को स्ट्रिंग के बजाय डेटटाइम में बदल सकते हैं? या प्रजनन में विशेष CaseRequest को ExpirationDateTime का विश्लेषण करें और फिर इसे भेजने से पहले परीक्षण करें? – msr

+0

@msr हाँ मैं कर सकता हूं, तुम क्यों पूछ रहे हो? – BinaryTie

उत्तर

2

आप परीक्षण के लिए दो पैरामीटर पास कर सकते हैं। एक date है और दूसरा expectedError हो सकता है। इस तरह आप अपने TestCase रों दिखाई देगा:

[TestCase("", "Error1"), TestCase(null, "Error2"), TestCase("String", "Error3")] 
[TestCase("2010-07-14T00:00:00.000Z", "Error4")] 
[TestCase("201-07-14T00:00:00.000Z", "Error5")] 

और तुम बस एक ही Assert होगा:

Assert.AreEqual(expectedError, responseBody.Message); 
0

स्पष्टीकरण ओपी NUnit 3.5.0 उपयोग कर रहा है मुझे लगता है कि आप एक बार देख लेना चाहिए के बाद TestCaseData विशेषता पर: हालांकि एकल ज़ोर सैम रहता https://github.com/nunit/docs/wiki/TestCaseData

ऐसा लगता है कि समाधान @DovydasSopa द्वारा प्रस्तावित की तुलना में एक और भी बेहतर कोड संगठन संभावना प्रदान करता है, ई।

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