2009-07-20 2 views
1

私はASP.NET MVCのユニットテストのためにMoqを使ってHttpRequestオブジェクトを嘲笑しています。リクエストにServerVariables(LOGON_USER)のいずれかを設定する必要があります。これは可能ですか?次のメソッドを使用してみましたが、ServerVariablesコレクションがオーバーライドされないため例外が発生します。Moqを使用してHttpRequestを嘲笑うときに、ServerVariable値を設定しますか?

request.SetupGet(req => req.ServerVariables["LOGON_USER"]).Returns(@"TestUserName"); 

テスト用にServerVariableの値を設定することはできますか?

特定のキーを1つ設定するのではなく、新しいNameValueCollectionを渡す必要がありますか?

+0

はここに私の答えを参照してくださいます。http:// stackoverflowの

私のコントローラは、新たな依存関係への参照が必要です。 com/a/34194622/573045 – Birey

答えて

0

[OK]を、これを考え出しました。

private static NameValueCollection CreateServerVariables(string logonUserName) 
{ 
    var collection = new NameValueCollection {{"LOGON_USER", logonUserName}}; 
    return collection; 
} 

は、その後、私は私の設定でこのようにそれを呼ばれる:

var request = new Mock<HttpRequestBase>(); 

    request.SetupGet(req => req.ServerVariables).Returns(CreateServerVariables(userName)); 
1

それを行うための一つの方法をだ私はServerVariablesのためNameValueCollectionのを作成するには、このメソッドを作成しました。私は通常、ルールを変更することでこれらのことを嘲笑します:私はHttpRequestまたは私のテストでその親戚について知りたくありません。代わりに、私は尋ねる:私は決定する場合は、ログオンしたユーザーの名前を取得できますか?

それはICallerContextか、それとも私たちが思いつくいい名前であろうと。それから私は代わりにこのインターフェイスを模擬します。コントローラに嘲笑インスタンスを渡す

public class MyController 
{ 
    public MyController(ICallerContext caller) {...} 
} 

私のテストの必要性:

var caller = new Mock<ICallerContext>(); 
var controller = new MyController(caller.Object); 

caller.Setup(c => c.LogonUserName).Returns("TestUserName"); 

controller.DoTheMagic(); 

//Assertion(s) goes here... 
関連する問題