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でそのインデクサーをモックする方法を知っている人はいますか?