1

偽のHttpContextが必要な単体テストを書いています。Phil Haack(http://haacked.com/archive/2007/06/19/unit-tests-web-code-without-a-web-server-using-httpsimulator.aspx)のHttpSimulatorを使用しました。ただし、Sitecore APIの関数は、次のコードで例外をスローします。

request.Browser.Browser.IndexOf("IE", StringComparison.OrdinalIgnoreCase) > -1;

コードをデバッグしましたが、request.Browser.Browserが空です。プロパティをMoqで埋めようとしましたが、例外が発生します。また、ヘッダーとして追加してみました。

私のコードは次のようになります:

using (HttpSimulator simulator = new HttpSimulator("/", "localpath"))
{
    //NameValueCollection nvc = new NameValueCollection { { "User-Agent", "IE" } };
    //simulator.SimulateRequest(new Uri("http://www.foo.bar"), HttpVerb.GET, nvc);
    simulator.SimulateRequest();        

    var browserMock = new Mock<HttpBrowserCapabilities>();
    browserMock.SetupAllProperties();
    //browserMock.SetupProperty(b => b.Browser, "IE");
    HttpContext.Current.Request.Browser = browserMock.Object;
}

このプロパティをモックする方法を知っている人はいますか?

4

2 に答える 2

4

実際にはこれが可能です-リクエストに応じてブラウザプロパティを直接設定できます:

httpSim.SimulateRequest(new Uri("http://www.test.com"));

HttpContext.Current.Request.Browser = new HttpBrowserCapabilities
                                                        {
                                                            Capabilities = new Dictionary<string,string>
                                                                {
                                                                    {"majorversion", "8"},
                                                                    {"browser", "IE"},
                                                                    {"isMobileDevice","false"}
                                                                }
                                                        };
于 2014-04-29T06:25:29.040 に答える
1

これはできません。MVCでHttpContextBaseedクラスを使用する必要があります。Webフォームを使用した単体テストは面倒です(?)

于 2012-07-23T07:51:07.060 に答える