テスト駆動方式でASP.NETMVCソリューションを使用しており、フォーム認証を使用してユーザーをアプリケーションにログインさせたいと考えています。コントローラーに入れたいコードは次のようになります。
FormsAuthentication.SetAuthCookie(userName, false);
私の質問は、このコードを正当化するためのテストをどのように書くのですか?
SetAuthCookieメソッドが正しいパラメーターで呼び出されたことを確認する方法はありますか?
偽の/模擬FormsAuthenticationを注入する方法はありますか?
まず、このロジックをカプセル化するインターフェイスとラッパークラスを作成してから、コントローラーでインターフェイスを使用します。
public interface IAuth
{
void DoAuth(string userName, bool remember);
}
public class FormsAuthWrapper : IAuth
{
public void DoAuth(string userName, bool remember)
{
FormsAuthentication.SetAuthCookie(userName, remember);
}
}
public class MyController : Controller
{
private readonly IAuth _auth;
public MyController(IAuth auth)
{
_auth = auth;
}
}
これで、IAuth
は単体テストで簡単にモックされ、コントローラーが期待されるメソッドを呼び出すことを確認できます。 FormsAuthWrapper
クラスは、本来の機能を実行するFormsAuthentication
に呼び出しを委任するだけなので、単体テストは行いません(Microsoftの保証:-))。