1

请告诉我如何通过不更改控制器操作来获取值。

Controller
     [HttpPost]
        public JsonResult A_Action_In_Controller(Guid ID)
        {
            var operationConfirmation = _repository.DoSomethingInDB(emailID);

            return Json(new { operationConfirmation }, JsonRequestBehavior.AllowGet);
        }
Test Method
    [TestMethod]
        public void DoSomethingInDB_SendOperationConfirmationToTheUI()
        {... 
                var expected = "Successfully Completed";

            var target = controller.A_Action_In_Controller(obj1.Id);

            Assert.AreEqual(expected, target.Data);

        }

错误

Assert.AreEqual failed. Expected:<Successfully Completed (System.String)>. Actual:<{ operationConfirmation = Successfully

已完成 } (<>f__AnonymousType2`1[[System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]])>。

请告诉我如何写类似的东西 Assert.AreEqual(expected, target.Data.operationConfirmation);

而不是我现在所拥有的,我不想更改我的控制器代码

Assert.AreEqual(expected, target.Data);

4

2 回答 2

0

您需要反序列化 JSON 字符串,下面使用JavaScriptSerializer该类:

首先,在您的方法中命名您的确认A_Action_In_Controller,如下所示:

return Json(new { confirmation = operationConfirmation }, JsonRequestBehavior.AllowGet);

然后在您的测试方法中执行此操作:

var js = new JavaScriptSerializer();
var deserializedTarget = (object[])js.DeserializeObject(target.Data.ToString());
var result = (string)deserializedTarget["confirmation"];

然后你可以这样做:

Assert.AreEqual(expected, result);
于 2013-01-21T12:23:11.640 回答
0

控制器改为

Controller
 [HttpPost]
    public JsonResult A_Action_In_Controller(Guid ID)
    {
        var operationConfirmation = _repository.DoSomethingInDB(emailID);

        return Json(operationConfirmation, JsonRequestBehavior.AllowGet);
    }

然后测试方法效果很好

  [TestMethod]
    public void DoSomethingInDB_SendOperationConfirmationToTheUI()
    {... var expected = "Operation failed";         


        var target = controller.A_Action_In_Controller(obj1.Id);

        Assert.AreEqual(expected, target.Data);
于 2013-01-21T14:02:39.397 回答