[英]How to access JsonResult data when testing in ASP.NET MVC
我在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);
是我想做的。 有任何想法嗎? 謝謝。
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”)]
你可以像這樣使用 - 結果將是預期的對象定義。 因此,如果成功,您的成功標志將為TRUE,否則為false,如果為false,則您應該期望將使用錯誤消息更新error屬性。
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;
}
如果您返回了一個實際上非匿名的類,您可能剛剛完成了:
var strongTypedResult = result as <YourStrongTypeHere>;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.