如何在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
- 当SignalR一次建立8-10个连接时,实时聊天不起作用
- 尝试在ASP.NET MVC3视图中使用带有ICollection 的EditorFor?
- 将参数传递给jsonresult的actionresult
- 无法使用asp.net mvc上传多个数据库映像
- 如何在MVC3中的TemplateEditor中向模型属性添加validation属性
- 如何将viewbag显示为html?
- entity framework:objectstatemanager中已存在具有相同密钥的对象
- MVC3 DropDownList + ViewBag问题
- Ninject和MVC3:dependency injection到动作filter