我正在使用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());
但是,它不起作用。请指导我纠正它。
答案 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 );