Comment accéder aux données JsonResult lors des tests dans ASP.NET MVC

J’ai ce code dans C # mvc Controller:

[HttpPost] public ActionResult Delete(ssortingng 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.ToSsortingng() }); } } 

Comment puis-je accéder à mon champ “erreur” Json dans un ControllerTest pour vérifier s’il est nul ou non?

 [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); C’est ce que j’aimerais faire. Des idées? Merci.

Vous pouvez utiliser comme ceci – le résultat sera la définition d’object attendue. Ainsi, en cas de succès, votre indicateur de succès sera VRAI, sinon faux et si faux, vous devriez vous attendre à ce que la propriété error soit mise à jour avec le message d’erreur.

  JsonResult jsonResult = oemController.List() as JsonResult; JavaScriptSerializer serializer = new JavaScriptSerializer(); Result result = serializer.Deserialize(serializer.Serialize(jsonResult.Data)); public class Result { public bool success ; public ssortingng error; } 

JavaScriptSerializer convient aux chaînes et aux types statiques. Ici, vous avez créé un type anonyme en Json (nouveau {success = true}). Dans ce cas, vous avez mieux utilisé le type dynamic.

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

Vous devez importer Microsoft.CSharp dll pour tester le projet.

Si test et votre contrôleur sont dans des assemblages différents, vous devez faire de l’assemblage de test un assemblage “ami” de l’assemblage du contrôleur, comme suit :

[assembly: InternalsVisibleTo (“nom de l’assembly testproject”)]

Si vous avez renvoyé une classe réellement non anonyme, vous auriez pu simplement faire:

var strongTypedResult = result as ;