HttpApplicationが非常に簡単に嘲笑に向いていないので、残念ながら、これは特に簡単ではありません。模擬するインターフェースはなく、ほとんどのメソッドは仮想としてマークされていません。
私は最近、HttpRequestとHttpWebResponseで同様の問題が発生しました。これは私が私自身のラッパーに対して嘲笑しましょうなど
、
public class HttpWebRequestWrapper : IHttpWebRequestWrapper
{
private HttpWebRequest httpWebRequest;
public HttpWebRequestWrapper(Uri url)
{
this.httpWebRequest = (HttpWebRequest)HttpWebRequest.Create(url);
}
public Stream GetRequestStream()
{
return this.httpWebRequest.GetRequestStream();
}
public IHttpWebResponseWrapper GetResponse()
{
return new HttpWebResponseWrapper(this.httpWebRequest.GetResponse());
}
public Int64 ContentLength
{
get { return this.httpWebRequest.ContentLength; }
set { this.httpWebRequest.ContentLength = value; }
}
public string Method
{
get { return this.httpWebRequest.Method; }
set { this.httpWebRequest.Method = value; }
}
public string ContentType
{
get { return this.httpWebRequest.ContentType; }
set { this.httpWebRequest.ContentType = value; }
}
}
など:最後に、私が行った解決策は、私が使用していた方法のためのストレート「パススルー」ラッパーを作成することでしたインタフェース。必ずしも世界でもっともエレガントなものではありませんが、フレームワークのあまり「あざける」部分を模倣する非常に便利な方法です。あなたがオフに急ぐといえ、これを行う前に
、それはあなたが持っているものの見直し、あなたがクラスをラップすることを避けるためでしょう、あなたのテストへのより良いアプローチがあれば見る価値があります。
HttpWebRequest、HttpApplicationらの場合、IMHOはしばしばありません。
あなたは、その後部品番号で、このようなものを行う(上記の私のHttpWebRequestの例を使用して)モックでこのラッパーを設定するには:
var mockWebRequest = new Mock<IHttpWebRequestWrapper>();
mockWebRequest.SetupSet<string>(c => c.Method = "POST").Verifiable();
mockWebRequest.SetupSet<string>(c => c.ContentType = "application/x-www-form-urlencoded").Verifiable();
mockWebRequest.SetupSet<int>(c => c.ContentLength = 0).Verifiable();
感謝を!私は少し物をリファクタしたので、余分な機能のほとんどは、HttpApplicationに頼るのではなく、嘲笑されたHttpContextBaseだけで作成できる外部クラスになりました。 –