如何在ASP.NET MVC中进行测试时访问JsonResult数据

我在C#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); 是我想做的。 有任何想法吗? 谢谢。

您可以这样使用 – 结果将是预期的对象定义。 因此,如果成功,您的成功标志将为TRUE,否则为false,如果为false,则您应该期望将使用错误消息更新error属性。

  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 string error; } 

JavaScriptSerializer适用于字符串和静态类型。 在这里,您创建了匿名类型为Json(new {success = true})。 这种情况下,你最好使用动态类型。

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

您需要导入Microsoft.CSharp dll以测试项目。

如果测试和控制器在不同的组件中,则需要使测试组件成为控制器组件的“朋友”组件,如下所示

[assembly:InternalsVisibleTo(“testproject assembly name”)]

如果您返回了一个实际上非匿名的类,您可能刚刚完成了:

var strongTypedResult = result as ;