好的 - 所以我就这样开始了,
public ViewResult Index()
{
return View(service.GetProjects());
}
这是我的考验。
[TestMethod]
public void Index_Will_Return_A_List_Of_Active_Projects()
{
var view = controller.Index();
Assert.AreEqual(view.ViewData.Model.GetType(), typeof(List<Project>));
}
所有这一切都与dokken一起摇滚,但后来我添加了登录,如果用户未经过身份验证,我会将其重定向到登录页面。这是新方法的样子。
public ActionResult Index()
{
if (Request.IsAuthenticated)
return View(service.GetProjects());
return RedirectToAction("Login", "Account");
}
我的问题是这个 - 我无法弄清楚如何为我的生活修复单元测试。我不能再返回一个ViewResult,所以我无法检查.ViewData.Model属性,但我无法弄清楚如何在仍然返回viewresult时重定向。我一直在拖网站,我找到了这个How do I redirect within a ViewResult or ActionResult function?,但这并没有真正帮助。
如果有人可以告诉我这里会有什么规则 - 我很难过。
答案 0 :(得分:1)
您的测试必须添加另一个步骤:声明返回的内容是ViewResult
。如果断言成功,则抛出它,然后继续使用另一个断言。
[TestMethod]
public void Index_Will_Return_A_List_Of_Active_Projects()
{
var result = controller.Index();
// this is called a guard assertion
Assert.IsInstanceOfType(result, typeof(ViewResult));
var view = (ViewResult)result;
Assert.AreEqual(view.ViewData.Model.GetType(), typeof(List<Project>));
}
答案 1 :(得分:1)
我会从您的操作中移除该逻辑并使用{{3}}代替。然后你的测试不会改变,你可以创建一个单独的测试,断言动作正在被属性修饰。
[Authorize]
public ViewResult Index()
{
return View(service.GetProjects());
}