2011-08-19 17 views
0

HttpResponseを使用する関数でNUnitとNSubstituteを使用してユニットテストを行っていますが、これらのオブジェクトをモックできないため、これらのオブジェクトを表すためのインターフェイスを作成できませんでした。 。Response.Cache.VaryByHeaderのNunitテスト

public static void CompressPage(IHttpRequestGetCompressionMode getCompressionMode, IHttpResponse httpResponse) 
    { 
     string supportedCompression = getCompressionMode.GetClientSupportedCompressionMode(); 
     if (supportedCompression != HttpHeaderValues.NoCompression) 
     { 
      switch (supportedCompression) 
      { 
       case HttpHeaderValues.DeflateCompression: 
        httpResponse.Filter = new DeflateStream(httpResponse.Filter, CompressionMode.Compress); 
        break; 
       case HttpHeaderValues.GZipCompression: 
        httpResponse.Filter = new GZipStream(httpResponse.Filter, CompressionMode.Compress); 
        break; 
      } 

      httpResponse.AppendHeader(HttpHeaderValues.ContentEncodingHeader, supportedCompression); 
      // this line is where i have the problem 
      httpResponse.Cache.VaryByHeaders[HttpHeaderValues.AcceptEncodingHeader] = true; 
     } 
    } 

私は「できません取得しています:私はResponse.Cache.VaryByHeader

// This is my HttpResponse interface 
public interface IHttpResponse 
{ 
    Stream Filter { get ; set; } 
    IHttpCachePolicy Cache { get; set; } 
    void AppendHeader(string name, string value); 
} 

// concrete httresponse 
public class HttpResponseProxy : IHttpResponse 
{ 
    private HttpResponse _httpResponse; 

    public Stream Filter { 
     get { 
      return _httpResponse.Filter ?? new MemoryStream(); 
     } 
     set { _httpResponse.Filter = value; } 
    } 

    public IHttpCachePolicy Cache 
    { 
     get { return new HttpCachePolicyProxy(_httpResponse.Cache); } 
     set { } 
    } 

    public HttpResponseProxy(HttpResponse httpResponse) 
    { 
     if (httpResponse == null) 
     { 
      throw new ArgumentNullException("httpResponse"); 
     } 

     _httpResponse = httpResponse; 
     _httpResponse.Filter = httpResponse.Filter; 
    } 

    public void AppendHeader(string name, string value) 
    { 
     _httpResponse.AppendHeader(name, value); 
    } 
}  

// HttpCachePolicy interface 
public interface IHttpCachePolicy 
{ 
    IHttpCacheVaryByHeaders VaryByHeaders { get; set; } 
} 

// concrete HttpCachePolicy 
public class HttpCachePolicyProxy : IHttpCachePolicy 
{ 
    private HttpCachePolicy _httpCachePolicy; 
    public HttpCachePolicyProxy(HttpCachePolicy httpCachePolicy) 
    { 
     _httpCachePolicy = httpCachePolicy; 
    } 

    public IHttpCacheVaryByHeaders VaryByHeaders 
    { 
     get { return new HttpCacheVaryByHeadersProxy(_httpCachePolicy.VaryByHeaders as HttpCacheVaryByHeaders); } 
     set { } 
    } 
} 


public interface IHttpCacheVaryByHeaders 
{ 
    IHttpCacheVaryByHeaders HttpCacheVaryByHeaders { get; set; } 
} 

public class HttpCacheVaryByHeadersProxy : IHttpCacheVaryByHeaders 
{ 
    private HttpCacheVaryByHeaders _httpCacheVaryByHeaders; 
    public HttpCacheVaryByHeadersProxy(HttpCacheVaryByHeaders httpCacheVaryByHeaders) 
    { 
     _httpCacheVaryByHeaders = httpCacheVaryByHeaders; 
    } 

    public IHttpCacheVaryByHeaders HttpCacheVaryByHeaders 
    { 
     get { return new HttpCacheVaryByHeadersProxy(_httpCacheVaryByHeaders); } 
     set { } 
    } 
} 

このためのインタフェースを作成する方法を理解するトラブルを抱えている

は、私が実際にテストしてい関数であります型IHttpCacheVaryByHeaders "の式にインデックスを適用します。 私はレスポンスとキャッシュのインターフェースを持っていますが、インターフェース内でVaryByHeadersをどのように表現し、それを具体的なクラスで使用するのですか?

答えて

0

エラーがIHttpCacheVaryByHeadersがインデクサを宣言(例えばbool this[string header] { get; set; })を持っていないことを示唆しているように思われるのではなく、これらのラッパーを自分で実装するより、HttpResponseWrapperおよびその他のSystem.Web.Abstractionsを試してみてください。これにより、このようなテストをもっと簡単に行うことができます。 :)

+0

こんにちはデビッドは大変ありがとう、私はブールを使用しています[文字列ヘッダー] {get;セット; }今のところ私のテストを修正するが、私はチャンスを得るとき抽象を見て、私はどのようにbool [string header] {get;セット; }動作しますが、私はそれを調べます。乾杯。 – Dave

関連する問題