2

コントローラーで使用されるサーバー変数をモックしました。

request.SetupGet(x => x.ServerVariables)
    .Returns(new System.Collections.Specialized.NameValueCollection
    {
        {"SERVER_NAME","localhost"}, 
        {"SCRIPT_NAME","localhost"}, 
        {"SERVER_PORT","80"}, 
        {"HTTPS","www.melaos.com"}, 
        {"REMOTE_ADDR","127.0.0.1"}, 
        {"REMOTE_HOST","127.0.0.1"} 
    });

Controller では Server 変数の値を取得できますが、Model クラスでは取得できません。なぜそうなのですか?

Controller と Model で値を取得する際の唯一の違いは、 Controller では書き込みHttpContext.Request.ServerVariables、 Model では書き込みHttpContext.Current.Request.ServerVariablesます。

彼らは違うのですか?モデルでもこれらの値を取得するにはどうすればよいですか。

4

1 に答える 1

3

モデルでは、HttpContext.Current.Request.ServerVariables を記述します。

HttpContext.Currentが問題です。これは、モックできない静的プロパティであり、単体テストなどの ASP.NET コンテキストの外部では使用できません。したがって、HttpContext.Current を使用すると、アプリケーションを単体テストできません。これは、モデルで HTTP 固有のアーティファクトを使用するべきではないと言われています。モデルが値を取得しようとしないように、コントローラーからモデルに値を直接渡す必要があります。

于 2011-12-05T09:57:19.803 に答える