8

HTMLヘルパーをテストしているときに問題が発生しました。基本的に、行、列、およびさまざまなタイプのデータが含まれるグリッドを作成しています。ヘッダーには、データがどの列で並べ替えられているかをユーザーに通知する画像もあります。ただし、今テストを書いているとき(遅すぎますが、決して正しくないよりも遅かったですか?!)、次のエラーがスローされます。

「アプリケーションへのパスが不明なため、アプリケーションの相対仮想パス'〜/ Images/SortingArrowUp.png'を絶対にすることはできません。」

 var imgPath = VirtualPathUtility.ToAbsolute("~/Images/SortingArrowUp.png");

どうすればこれを解決できますか。テスト中にこれがどのように問題になる可能性があり、画像が利用できない可能性があるかなどは理解できますが、これを行う正しい方法は何ですか?

4

2 に答える 2

15

正しい方法は、UrlHelper.GenerateContentUrlの代わりに呼び出すことですVirtualPathUtility。ヘルパーコードでは、次のようにします。

MvcHtmlString MyHelper(this HtmlHelper helper, ...) {
  // other code
  var imgPath = UrlHelper.GenerateContentUrl("~/Images/SortingArrowUp.png",
                                             helper.ViewContext.HttpContext);
  // other code
}

単体テストでは、正しくモックされたコンテキストオブジェクトを渡す必要があります。モックする必要がありますHttpContext.Request.ApplicationPath-ダミーのアプリパスを返す、HttpContext.Response.ApplyAppPathModifier()-何もしない、HttpContext.Request.ServerVariables-nullを返すHttpContext.Request.Path、 -HttpContext.Request.RawUrl意味のある値を返す。

于 2010-08-06T23:08:49.530 に答える
5

このオーバーロードを使用できます。

var imgPath = VirtualPathUtility.ToAbsolute("~/Images/SortingArrowUp.png", 
    context.Request.ApplicationPath);

これはUrlHelper.GenerateContentUrl内部で使用されるものであり、モックするだけで済みますApplicationPath

于 2010-11-17T19:50:28.953 に答える