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 に答える