1

OK-それで私はこのように始めました、

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>));
}

それはすべてドッケンで揺らいでいますが、ログインを追加し、ユーザーが認証されていない場合は、ログインページにリダイレクトします。新しいメソッドは次のようになります。

   public ActionResult Index()
   {
      if (Request.IsAuthenticated)
          return View(service.GetProjects());
      return RedirectToAction("Login", "Account");
   }

私の問題はこれです-私は私の人生のためにユニットテストを修正する方法を理解することができません。ViewResultを返すことができなくなったため、.ViewData.Modelプロパティを確認できませんが、viewresultを返しながらリダイレクトする方法がわかりません。私はサイトをトローリングしていて、これを見つけました。ViewResultまたはActionResult関数内でリダイレクトするにはどうすればよいですか?しかし、それは本当に役に立ちません。

誰かが私にここまで何を支配するかを教えてくれるなら-私は困惑しています。

4

2 に答える 2

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>));
}
于 2012-07-12T03:51:57.127 に答える
1

そのロジックをアクションから削除し、代わりにAuthorizeAttributeを使用します。その後、テストは変更されず、アクションが属性によって装飾されていることを表明する別のテストを作成できます。

[Authorize]
public ViewResult Index() 
{ 
    return View(service.GetProjects()); 
}
于 2012-07-12T03:59:48.347 に答える