RouteContext を使用して UrlHelper を作成すると、単体テスト環境で HttpContext が null になります。これがないと、それに依存するメソッドを呼び出そうとすると、多くの NullReferenceExceptions が発生します。
さまざまな Web コンテキストをモックするスレッドが多数あります。これを確認できます:
Moq を使用して ASP.NET MVC で HttpContext をモックするにはどうすればよいですか?
またはこれ
は、Test Init Method の Mock HttpContext.Current です。
編集:
以下が機能します。HttpContext.Request.ApplicationPath と HttpContext.Response.ApplyAppPathModifier() をモックする必要があることに注意してください。
[Test]
public void DummyTest() {
var context = new Mock<HttpContextBase>();
context.Setup( c => c.Request.ApplicationPath ).Returns( "/tmp/testpath" );
context.Setup( c => c.Response.ApplyAppPathModifier( It.IsAny<string>( ) ) ).Returns( "/mynewVirtualPath/" );
RequestContext requestContext = new RequestContext( context.Object, new RouteData() );
UrlHelper urlHelper = new UrlHelper( requestContext );
string path = urlHelper.Content( "~/test.png" );
Assert.IsNotNullOrEmpty( path );
}
この詳細については、次のスレッドを参照してください:
ASP.NET 仮想パスはどこでチルダ "~" を解決しますか?