こんにちは私はASP.Net MVC2プロジェクトで単体テストをやっています。私はMoqフレームワークを使用しています。私のLogOnController、FormAuthenticationServiceクラスでMoqを使ったFormsAuthentication.SetAuthCookieの模倣
[HttpPost]
public ActionResult LogOn(LogOnModel model, string returnUrl = "")
{
FormsAuthenticationService FormsService = new FormsAuthenticationService();
FormsService.SignIn(model.UserName, model.RememberMe);
}
、で
public class FormsAuthenticationService : IFormsAuthenticationService
{
public virtual void SignIn(string userName, bool createPersistentCookie)
{
if (String.IsNullOrEmpty(userName)) throw new ArgumentException("Value cannot be null or empty.", "userName");
FormsAuthentication.SetAuthCookie(userName, createPersistentCookie);
}
public void SignOut()
{
FormsAuthentication.SignOut();
}
}
私の問題は、私は
FormsService.SignIn(model.UserName, model.RememberMe);
この行の実行を避けることができる方法です。それとも私のASP.Net MVC2プロジェクトを変更せずに部品番号のフレームワークを使用して
FormsService.SignIn(model.UserName, model.RememberMe);
をMOQする方法はあります。 IFormsAuthenticationService
の正しいインスタンスを実行時に使用されるように、あなたのLogOnController
private IFormsAuthenticationService formsAuthenticationService;
public LogOnController() : this(new FormsAuthenticationService())
{
}
public LogOnController(IFormsAuthenticationService formsAuthenticationService) : this(new FormsAuthenticationService())
{
this.formsAuthenticationService = formsAuthenticationService;
}
への依存関係として
SUT(テスト中のシステム) - 'LogOnController'または' FormsAuthenticationService'とは何ですか?前者の場合、 'FormsAuthenticationService'のために偽物を提供し、' SignIn'メソッドが呼び出されていることを確認する必要があります。後者は、( 'HttpResponse'に)クッキーを追加するための現在の' HttpContext'を必要とするため、単体テストが難しくなります。 –
LogOnControllerをテストします。私はFormsService.SignIn(model.UserName、model.RememberMe)をモックしようとしました。 このようにして、 var formService = new Mock(); しかし、formservice.SignInは何も返しません。その行の実行を避けるにはどうすればよいのですか?私はMoqを使用してそれを模擬する方法を知らない。 –
Dilma