2009-04-09 6 views
3

このメソッドをユニットテストする必要があります。私はモックフレームワークとしてmoqを使用しています。このメソッドをユニットテストする方法は?

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

歓声:)

EDIT:それは主に私が思っていたをFormsAuthenticationました。私はそれをテストすべきか?アイデンティティをモックアップし、IsAuthenticatedがfalseであることを確認する必要があると思いますか?

答えて

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

あなたはをFormsAuthenticationのためのラッパーを作成し、

formsAuthentication = mockery.Stub<IFormsAuthentication>(); 

をそれをスタブと、このような何かを行うことができます。

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

/* Asserts to go here */ 

FormsAuthenticationのテストに関しては、これをどこか別の場所でテストし、懸念事項とそのすべてを分離してください。

このアクションのテストでは、SignOutメソッドが呼び出されたことと、リダイレクトが発生したかどうかを確認するだけで済みます。アクション内のメソッドではなく、アクションをテストしていることを忘れないでください。送信アクションでデータストアの仕事をテストしないで、すべてのことを嘲笑します。

+0

はそう...それはRhinoのモックで行われていると述べている必要があります.....が、原理は全く同じ –

+0

いまいましいです。私はちょうどMOQでこれを行う方法を理解することができません:( –

+0

私はMOQの経験が全くないので、申し訳ありませんがあなたをそこに助けることができません。 –

関連する問題