2013-06-21 6 views
10

ASP.NET में परीक्षण मैं सी # MVC नियंत्रक में इस कोड है JsonResult डेटा का उपयोग कैसे करें:जब MVC

[HttpPost] 
    public ActionResult Delete(string runId) 
    { 
     if (runId == "" || runId == null) 
     { 
      return this.Json(new { error = "Null or empty params" }); 
     } 
     try 
     { 
      int userId = (int)Session["UserId"]; 
      int run = Convert.ToInt32(runId); 

      CloudMgr cloud = new CloudMgr(Session); 
      cloud.DeleteRun(userId, run); 

      return this.Json(new { success = true }); 
     } 
     catch (Exception ex) 
     { 
      return this.Json(new { error = ex.ToString() }); 
     } 
    } 

मैं कैसे जांच करने के लिए एक ControllerTest में मेरी Json "त्रुटि" क्षेत्र का उपयोग कर सकते हैं अगर यह रिक्त है या नहीं?

[TestMethod] 
    public void DeleteWrongParam() 
    { 
     WhatIfController controller = new WhatIfController(); 
     controller.ControllerContext = 
     TestUtils.CreateMockSessionControllerContext().Object as ControllerContext; 

     JsonResult result = controller.DeleteWhatIf(null) as JsonResult; 

Assert.IsNotNull(result.Data.error); वह है जो मैं करना चाहता हूं। कोई विचार? धन्यवाद।

उत्तर

15

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

 JsonResult jsonResult = oemController.List() as JsonResult; 
     JavaScriptSerializer serializer = new JavaScriptSerializer(); 
     Result result = serializer.Deserialize<Result>(serializer.Serialize(jsonResult.Data)); 

     public class Result 
     { 
      public bool success ; 
      public string error; 
     } 
+0

परिणाम कक्षा के लिए नामस्थान क्या है? धन्यवाद। – juanchoelx

+0

@juanchoelx परिणाम इस वर्ग के परिणाम {सार्वजनिक बूल सफलता की तरह आपकी खुद की परिभाषित कक्षा है; सार्वजनिक स्ट्रिंग त्रुटि} – Devesh

+0

@juanchoelx मैंने अपने कोड में अपना कोड अपडेट किया। – Devesh

18

जावास्क्रिप्टसेरियलाइज़र स्ट्रिंग और स्थिर प्रकार के लिए अच्छा है। यहां आपने अज्ञात प्रकार जेसन (नया {सफलता = सत्य}) बनाया है। इस मामले में, आपने बेहतर गतिशील प्रकार का उपयोग किया था।

JsonResult result = controller.DeleteWhatIf(null) as JsonResult; 
dynamic dresult = result.Data; 
Assert.IsTrue(dresult.succes); 

आपको प्रोजेक्ट का परीक्षण करने के लिए Microsoft.CSharp dll आयात करने की आवश्यकता है।

परीक्षण और अपने नियंत्रक विभिन्न विधानसभाओं में हैं, तो आप, परीक्षण विधानसभा नियंत्रक विधानसभा की एक 'मित्र' विधानसभा बनाने की जरूरत है इस की तरह:

[विधानसभा: InternalsVisibleTo ("testproject विधानसभा नाम")]

+0

+1। मैंने इसे असेंबली विशेषता के बिना ऐसा करने की कोशिश की और यह पता नहीं लगा सका कि यह पहले क्यों उड़ा रहा था। –

+0

सेकेंडेड। मैंने 'InternalsVisibleTo' के बारे में ध्यान आकर्षित करने के लिए उत्तर संपादित किया है। –

+2

आप इसे अधिक आसान बना सकते हैं 'गतिशील परिणाम = नियंत्रक। DeleteWhatIf (शून्य) JsonResult के रूप में; Assert.IsNotNull (result.Data.error); '=) – RMazitov