好的-所以我一开始是这样的,
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的同时如何重定向。我一直在浏览这个网站,我发现了这个问题。我如何在ViewResult或ActionResult函数中重定向?但这并没有真正的帮助。
如果有人能告诉我在这里该怎么做,那将是规则——我被难住了。
我会从您的操作中删除该逻辑,转而使用AuthorizeAttribute。然后你的测试不会改变,你可以创建一个单独的测试,断言动作是由属性修饰的。
[Authorize]
public ViewResult Index()
{
return View(service.GetProjects());
}
您的测试将不得不添加另一个步骤:断言返回的是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>));
}