7

私はいつもASP.NETでHttpContextを偽造/モック/スタブしています(ASP.NET MVC / MonoRailでははるかに簡単です)。

しかし、HttpContext自体は、文字通り数行のコードで簡単に構築できることがわかります。

var tw = new StringWriter();
var workerReq = new SimpleWorkerRequest("/webapp", @"c:\here\there\wwwroot", "page.aspx", tw);
var context = new HtpContext(workerReq);

このコードをこのようなものにラップすると、正常に機能するはずです。おそらく、それを使用してASPXをレンダリングすることもできます。

using(Simulate.HttpContext()) {
  HttpContext.Current.BlaBla;
}

したがって、質問は次のとおりです。

  1. それが行われるべきではない理由。
  2. それが行われるべきである理由。
  3. なぜそれが広く使われていないのか(実際、私はそれについての投稿を覚えていません)。

PhillHaackがReflectionハックを使用してHttpContextを構築した1つの投稿を覚えています。
しかし、それは必要ないようです。

乾杯、
ドミトリ。

4

3 に答える 3

5

非常に単純なテストを行うのは問題ありませんが、HttpRequest.Filesを使用するコンポーネントをどのように単体テストしますか?私の知る限り、SimpleWorkerRequestでこれを指定できるパブリックAPIはありません。HttpFileCollectionプロパティを設定できる場所を見つけたとしても、そのコンストラクターは内部であるため、そのタイプのインスタンスを作成することさえできないことに注意してください。

この点に関しては、HttpRequest.Filesだけではありません。実際、現在のHttpContext実装では、テストできるものよりもはるかに多くのものがテストできない可能性があります。これは、抽象化が本当に役立つところです。

于 2009-11-06T12:35:37.243 に答える
2

考慮すべきシナリオがいくつかあります。

シナリオ1:ユニットテストを行っています。キャッシュへのアクセスを管理し、HttpContent.Cacheを明示的に呼び出すクラスのような小さなものがあります。この場合、コンテキストをモックして、どの呼び出しが行われているか、およびそれらが期待どおりに機能しているかどうかを確認できるようにします。

シナリオ2:統合テストを実行しており、複雑なページの生成などの大きなものをテストしようとしています。この場合、実際のHttpContentオブジェクトを見つけた方法で指定します。統合テストは、実際のランタイムをより適切にシミュレートします。

于 2009-11-06T12:34:39.787 に答える
0

それはうまくいくかもしれませんが...

  • まず、環境によって異なる可能性のあるいくつかのパスが表示されます。
  • 次に、IISのようなものをインストールする必要がありますか?
  • それを作成するのにどれくらいの時間がかかりますか?それを必要とする100のテストがあり、1秒かかる場合、それは私のテストが約1分以上長く実行されることを意味し、開発者がテストを実行する回数が少なくなります。
  • テストシナリオを作成するために、キャッシュ、リクエストなどをモック/セットアップするのはどれくらい簡単ですか?

モック/スタブはおそらく簡単です。

編集

MonoプロジェクトでHttpContextとSimpleWorkerRequestのソースコードが見つかりました:

それらは、創造において何が起こっているかについてより良い洞察を与えることができます。

同様に役立つ可能性のある記事を見つけました:ASP.NET CreateApplicationHost /SimpleWorkerRequestAPIホール

これは、実際には、それらを適用する前にそれらのオブジェクトで何が起こっているかを理解する必要があり、時間がかかることをうまく示しています。モッキングは簡単なようです。

于 2009-11-06T12:37:05.367 に答える