2012-12-20 13 views
12

मैं एक विधि है कि रिटर्नकिसी अज्ञात प्रकार की संपत्ति को कैसे पढ़ा जाए?

return new System.Web.Mvc.JsonResult() 
{      
    Data = new 
    { 
     Status = "OK", 
    } 
} 

मैं एक इकाई परीक्षण जहां मुझे लगता है कि jsonResult.Data.status= "OK" सत्यापित करने की आवश्यकता लिखने के लिए की जरूरत है।

मैं स्थिति संपत्ति कैसे पढ़ूं?

अद्यतन: मैंने कोशिश की [असेंबली: InternalsVisibleTo ("TestingAssemblyName")], लेकिन इससे मदद नहीं मिली। मुझे त्रुटि मिल रही है {"'System.Web.Mvc.JsonResult' में 'स्थिति' के लिए परिभाषा नहीं है}}

इसके अलावा मुझे लगता है कि मैं जिस कोड का परीक्षण कर रहा हूं उसे संशोधित करना पसंद नहीं करूंगा।

तो मैंने जॉन की सलाह ली और प्रतिबिंब का उपयोग किया।

dynamic foo = ret.Data; 
Assert.AreEqual("OK", foo.status); 

नोट है कि आप अपने उत्पादन में गुमनाम प्रकार करने के लिए अपने इकाई परीक्षण विधानसभा पहुँच प्रदान करने के क्रम में [InternalsVisibleTo] का उपयोग करना होगा:

 var type = jsonResult.Data.GetType(); 

     var pinfo = type.GetProperty("Status"); 

     string statusValue = pinfo.GetValue(jsonResult.Data,null).ToString(); 

     Assert.AreEqual("OK", statusValue); 
+0

एक एमएस यूनिट टेस्ट या जावास्क्रिप्ट में? –

+0

यदि आप इसे सी # से कर रहे हैं, तो आप केवल 'गतिशील' का उपयोग कर सकते हैं और गतिशील बांधने की मशीन का ख्याल रखना चाहिए। – vcsjones

+0

गैलियो यूनिट परीक्षण। मैं जो कोशिश कर रहा हूं वह है Assert.AreEqual ("OK", jsonResult.Data.Status) – developer747

उत्तर

17

सरल दृष्टिकोण शायद गतिशील टाइपिंग उपयोग करने के लिए किया जाएगा असेंबली, क्योंकि इसे internal एक्सेस के साथ उत्पन्न किया जाएगा।

वैकल्पिक रूप से, प्रतिबिंब का उपयोग करें।

6

dynamic:

dynamic testObject = YourMethodThatReturnsDynamicObject().Data; 
Assert.AreEqual("OK", testObject.Status); 
+1

अपेक्षित मान 'AreEqual' के लिए पहला तर्क होना चाहिए, और वास्तविक मान दूसरा होना चाहिए। –

+0

@ जोन्स स्केट .. वहां आप जाते हैं, हालांकि मैं इसे टाइप कर रहा था, मैंने अभी नहीं सोचा था (कभी-कभी इंटेलिजेंस एक लंबा रास्ता तय करता है!)। –

+0

@ बेनामीवॉटर: मैं सहानुभूति वोट की सराहना करता हूं .. जब आप जॉन के साथ एक ही समय में जवाब देते हैं तो उसे प्राप्त करना मुश्किल होता है! :) –

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