3

このメソッドを単体テストする必要があります。それが役立つ場合、私はモッキングフレームワークとしてmoqを使用しています。

[AcceptVerbs(HttpVerbs.Get)]
public RedirectToRouteResult LogOff()
{
    FormsAuthentication.SignOut();
    return RedirectToAction("Index", "Post");
}

乾杯 :)

編集:それは主に、私が疑問に思っていた FormsAuthentication でした。私はそれをテストする必要がありますか?ID をモックアップして、IsAuthenticated が false であることを確認する必要があると思いますか?

4

2 に答える 2

4

FormsAuthentication のラッパーを作成し、それをスタブ化できます

formsAuthentication = mockery.Stub<IFormsAuthentication>();

そして、このようなことをしてください。

With.Mocks(mockery)
    .Expecting(() => Expect.Call(() => formsAuthentication.SignOut()))
    .Verify(() => controller.LogOff());

 /* Asserts to go here */

FormsAuthentication のテストに関して。これを別の場所でテストし、懸念事項の分離などを行います。

このアクションのテストでは、SignOut メソッドが呼び出されたことと、リダイレクトが発生したかどうかを確認するだけで済みます。アクション内のメソッドではなく、アクションをテストしていることに注意してください。Submit アクションでデータ ストアの動作をテストするのではなく、そのすべてをモックします。

于 2009-04-09T13:15:03.080 に答える
2

これは、Moqでこれを行う方法です。IFormsAuthenticationをラッパーとして作成したと仮定します。

[Test]
public void LogOffSignsUserOut()
{
   var controller = new MyController();
   var authMock = new Mock<IFormsAuthentication>();
   controller.Authentication = authMock.Object;   //inject your mock

   controller.LogOff()

   authMock.Verify(x=>x.SignOff(), Times.Once());
}
于 2012-12-29T14:38:09.377 に答える