有点测试的菜鸟,所以请多多包涵,
我有一个控制器,它返回一个 JsonResult ,其中包含一个由 Url.Action 计算的字符串,如下所示:
public ActionResult GetResult(SomeModel model)
{
if (ModelState.IsValid)
{
return Json(new { redirectTo = Url.Action("Index", "Profile") });
}
}
当我使用 jQuery 使用该结果时,应用程序工作得很好。
然而,在我的单元测试期间,我遇到了问题,因为当我测试 Json 字符串的内容时,redirectTo 值似乎为“null”,即使它在应用程序本身中不为 null。
我的测试方法看起来有点像这样:
[Test]
public void GetResult_Success()
{
var result = controller.GetResult(new SomeModel());
Assert.IsNotNull(result);
Assert.IsInstanceOf<JsonResult>(result);
var jsonResult = result as JsonResult;
var jsonObject = JsonConvert.DeserializeAnonymousType(new JavaScriptSerializer().Serialize(jsonResult.Data), new
{
redirectTo = string.Empty
});
Assert.AreEqual("Profile/Index", jsonObject.redirectTo);
}
这失败了,因为 jsonObject.redirectTo 为空。如果在我的控制器中我将 Url.Action 更改为“配置文件/索引”,则测试通过。但是 Url.Action("Index", "Profile") 失败,因为它仅在单元测试中变为 null。
如果我尝试在上下文设置中为测试设置路由值,则会抱怨它们已经注册。我正在使用起订量。知道我需要设置什么吗?提前谢谢了