HttpContextFactoryを作成し、それを使用して、テスト内に設定します。
public static class HttpContextFactory
{
[ThreadStatic]
private static HttpContextBase _mockHttpContext;
public static void SetHttpContext(HttpContextBase httpContextBase)
{
_mockHttpContext = httpContextBase;
}
public static HttpContextBase GetHttpContext()
{
if (_mockHttpContext != null)
{
return _mockHttpContext;
}
if (HttpContext.Current != null)
{
return new HttpContextWrapper(HttpContext.Current);
}
return null;
}
}
次に、これに対するコードで:
var url = HttpContextFactory.GetHttpContext().Request.Url;
次に、テストでプロパティを継ぎ目として使用します
HttpContextFactory.SetHttpContext(HttpMocks.HttpContext());
ここで、HttpMocksには次のものがあり、テストに合わせて調整されます。
public static HttpContextBase HttpContext()
{
var context = MockRepository.GenerateMock<HttpContextBase>();
context.Stub(r => r.Request).Return(HttpRequest());
// and stub out whatever else you need to, like session etc
return context;
}
public static HttpRequestBase HttpRequest()
{
var httpRequest = MockRepository.GenerateMock<HttpRequestBase>();
httpRequest.Stub(r => r.Url).Return("/"); //or some test setting
return httpRequest;
}