簡體   English   中英

在ASP.NET MVC中進行測試時如何訪問JsonResult數據

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM