0

この単体テストが機能しない理由がわかりません。これは、次のコード サンプルに基づいています: 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 ステータスをチェックするテストは常に失敗します。どんな助けでも大歓迎です!

4

1 に答える 1

-1

304 と 403 が等しくないことを証明できました。自分へのメモ: 数字を直接使用する代わりに、http ステータス コードの列挙を使用してください。

于 2012-12-04T02:29:50.400 に答える