1

hanselmanの記事に従い、FakeHttpContextを使用することで、コンテキストオブジェクトを使用してasp.net関連のメソッドの単体テストを正常に行うことができました。

次のようにFakeHttpContextを構築し、次のようにFakeHttpContext内にQueryString、サーバー変数を設定することは、asp.netコンテキストオブジェクトの実際のテストではないと言われています。この方法とこのテストは、hanselmanの記事で提供されているように私にとってはうまく機能しています。

    public static HttpContextBase FakeHttpContext()
    {
        var context = new Mock<HttpContextBase>();
        var request = new Mock<HttpRequestBase>();
        var response = new Mock<HttpResponseBase>();
        var session = new Mock<HttpSessionStateBase>();
        var server = new Mock<HttpServerUtilityBase>();

        request.Setup(x => x.QueryString).Returns(new NameValueCollection
                {
                    {"blah","7"}, 
                    {"blah1","8"}
                });

        request.Setup(x => x.ServerVariables).Returns(new NameValueCollection
                {
                    {"SERVER_NAME","myserver"}, {"SCRIPT_NAME","myperfectscript"}, 
                    {"SERVER_PORT","80"}, {"HTTPS","www.microsoft.com"}
                });

        request.Setup(x => x.Form).Returns(new NameValueCollection
                {
                    {"TextBox1", "hello"},
                    {"Button1", "world"},
                    {"Label1", "yournamehere"}
                });

        request.Setup(x => x.Cookies).Returns(new HttpCookieCollection());

        HttpCookie cookie1 = new HttpCookie("userInfo");
        cookie1["username"] = "Tom";
        cookie1["password"] = "pass";

        request.Object.Cookies.Add(cookie1);

        HttpCookie cookie2 = new HttpCookie("compInfo");
        cookie2["companyname"] = "google";
        cookie2["companypassword"] = "googlepassword111";

        request.Object.Cookies.Add(cookie2);

        context.Setup(ctx => ctx.Request).Returns(request.Object);
        context.Setup(ctx => ctx.Response).Returns(response.Object);
        context.Setup(ctx => ctx.Session).Returns(session.Object);
        context.Setup(ctx => ctx.Server).Returns(server.Object);

        return context.Object;
    }

フィドラーを介してファイル内のすべての応答/要求レベルパラメーターを含むすべてのページ詳細をキャプチャし、ファイルをテストオブジェクトに読み込み、保存されたファイルからクエリ文字列などのページレベルパラメーターを読み取り、それに対してテストするように指示されます。

file / fiddlerを使用するこのアプローチは、私には意味がありません。これは、ファイルを読み取って正規表現するための多くのコードを作成するための追加の演習になります。

私に賛成してくれますか?この状況であなたは何をしましたか?

4

1 に答える 1

1

私は通常、ファイル、データベース、ストリームなどのリソースにアクセスするテストを、単体テストよりも統合テストとして宣言します。より大規模な継続的インテグレーション環境の一部としてこれらのテストを実行している場合、これらのテストは簡単に失敗する可能性があり、たとえばファイルがロックされているという理由だけで赤いビルドが発生します...

于 2012-05-04T02:59:23.047 に答える