如何在xunit测试用例中测试JSonResult?

时间:2015-02-25 15:01:01

标签: asp.net-mvc-5 xunit.net

我正在使用xunit(ASP.NET MVC)进行单元测试。 我在控制器中写了Action,返回JsonResult。 为了返回JsonResult,在Action中写道:

return Json(new { ok = true, newurl = Url.Action("Login") });

为了测试动作,我在单元测试用例中写道:

JsonResult jsonResult = _accountController.ForgotPassword(ValidUserName) as JsonResult;
Assert.Equal("{ ok = true, newurl = Url.Action('Login') }", jsonResult.Data.ToString());

但是,它不起作用。请指导我纠正它。

1 个答案:

答案 0 :(得分:0)

我建议您调试单元测试并查看jsonResult.Data.ToString()返回的值。我的猜测newurl不包含您的想法。假设您正在使用VS2013,您可以通过设置断点轻松调试单元测试,在测试方法体内单击鼠标右键,然后选择Debug Tests。

验证信息的另一种方法是将JsonResult.Data转换为动态。这允许您单独比较每个属性,而不是对JSON进行字符串化并比较结果。在我看来,当JSON变得比一些属性更大时,这种方法更清晰。

var dynData = (dynamic)jsonResult.Data;
Assert.IsTrue( (bool)dynData.ok );
Assert.AreEqual( Url.Action("Login"), (string)dynData.newurl );