4

C#/ ASP.NET/webformsで記述された大規模なレガシーコードベースに単体テストを追加しています。MOQとXUnitを使用しています。次のような構文を使用して、クエリ文字列値をモックすることができました。

Mock<HttpRequestBase> request = new Mock<HttpRequestBase>();
NameValueCollection queryStringParams = new NameValueCollection();
queryStringParams.Add("name", "Fred Jones");
request.Setup(x => x.QueryString).Returns(queryStringParams);

これにより、このコードは正常に機能します。

string name = _mockRequest.QueryString["name"];

問題は、コードベース全体に散在しているのは、クエリ文字列変数またはフォーム変数を次の形式で取得するための多くの呼び出しです。

string name = HttpContext.Current.Request["name"];

インデクサーは、クエリ文字列、フォーム値、Cookie、サーバー変数など、さまざまなコレクションをすべて調べているようです。これらのコレクションの1つを使用するようにプロダクションコードをリファクタリングすることによって、多くの潜在的な副作用を導入したくありません。

HttpRequestでそのインデクサーをモックする方法を知っている人はいますか?

4

1 に答える 1

8

私はこれを理解しました、それは私がそれを作っているよりも簡単でした。

//
// Set a variable in the indexer collction
//
Mock<HttpRequestBase> request = new Mock<HttpRequestBase>();
request.SetupGet(r => r["name"]).Returns("Fred Jones");
于 2013-01-17T02:57:39.900 に答える