この単体テストが機能しない理由がわかりません。これは、次のコード サンプルに基づいています: http://weblogs.asp.net/rashid/archive/2009/03/12/unit-testable-httpmodule-and-httphandler.aspx
[Test]
public void when_user_doesnt_authenticate_returns_304_status()
{
_httpContext = new Mock<HttpContextBase>();
_httpRequest = new Mock<HttpRequestBase>();
_httpResponse = new Mock<HttpResponseBase>();
_httpContext.SetupGet(context => context.Request).Returns(_httpRequest.Object);
var module = new TAS.HttpModule.TASHttpModule();
_httpResponse.SetupSet(response => response.StatusCode = 304).Verifiable();
_httpContext.SetupGet(context => context.Response).Returns(_httpResponse.Object);
module.OnAuthenticateRequest(_httpContext.Object);
_httpResponse.VerifyAll();
}
http モジュールからのコード (問題を示すために簡略化)
public class TASHttpModule : BaseHttpModule
public override void OnAuthenticateRequest(HttpContextBase context)
{
HttpResponseBase response = context.Response;
response.StatusCode = 403;
response.StatusDescription = "Access Denied";
response.End();
}
}
public class BaseHttpModule
{
public void Init(HttpApplication context)
{
context.BeginRequest += (sender, e) => OnBeginRequest(new HttpContextWrapper(((HttpApplication)sender).Context));
context.Error += (sender, e) => OnError(new HttpContextWrapper(((HttpApplication)sender).Context));
context.EndRequest += (sender, e) => OnEndRequest(new HttpContextWrapper(((HttpApplication)sender).Context));
context.AuthenticateRequest += (sender, e) => OnAuthenticateRequest(new HttpContextWrapper(((HttpApplication)sender).Context));
}
public void Dispose()
{
}
public virtual void OnBeginRequest(HttpContextBase context)
{
}
public virtual void OnError(HttpContextBase context)
{
}
public virtual void OnEndRequest(HttpContextBase context)
{
}
public virtual void OnAuthenticateRequest(HttpContextBase context)
{
}
}
基本的な問題は、response.StatusCode 値を設定できないことです。常にゼロに戻ります。したがって、304 ステータスをチェックするテストは常に失敗します。どんな助けでも大歓迎です!