1

MVC で簡単に使用できるように、GetGlobalResourceObject と GetLocalResourceObjet をラップするクラスがあります。モデル検証クラスは、エラー メッセージをリソース ファイルから動的に読み込みます。問題は単体テストです。コードは「~/」を使用しており、ソリューションを実行するとすべてが正しく機能しますが、「System.Web.HttpException: The application relative virtual path '~/」というエラーが常に表示されるため、単体テストの作成方法がわかりません。 ' アプリケーションへのパスが不明なため、絶対パスにすることはできません。」

例外をスローするコードは次のとおりで、式を評価してグローバル リソース オブジェクトを返すために使用されます。

Private Function GetExpressionFields(ByVal expression As String) As ResourceExpressionFields
    Return GetExpressionFields(expression, "~/")
End Function

Private Function GetExpressionFields(ByVal expression As String, ByVal path As String) As ResourceExpressionFields
    Dim context As New ExpressionBuilderContext(path)
    Dim resource_builder As New ResourceExpressionBuilder()
    Dim fields As ResourceExpressionFields
    fields = DirectCast(resource_builder.ParseExpression(expression, GetType(String), context), ResourceExpressionFields)
    Return fields
End Function

このコードやリソース ファイルを使用する他のコードをテストする方法について何かアイデアはありますか?

4

3 に答える 3

4

私は少し違うアプローチを取りました。私は App_* ディレクトリの外でリソース ファイルを使用します。この場合、IDE はファイルにカスタム ツールを追加して、ビューを含むソリューション内のどこでも機能し、単体テスト中に動作するリソースの厳密に型指定されたラッパーを生成します。http://odetocode.com/Blogs/scott/archive/2009/07/15/13211.aspx

これはあなたの質問に対する正確な答えではありませんが、App_* リソースがすべての条件下で正しく動作するようにすることは、かなりの作業だったと思います。

于 2009-07-17T19:30:30.893 に答える
0

ResourceExtensionsクラスにプロパティを作成できます(例:bool IsInTestScope)。次に、テストクラスでそれをtrueに設定し、ローカライズされたテキストを返すメソッド内で次のようにします。

public static string Resource(このコントローラーコントローラー、文字列式、params object [] args)

{{

if(!IsInTestScope)

{{

ResourceExpressionFields fields = GetResourceFields(expression、 "〜/");

GetGlobalResource(fields、args);を返します。

}

string.Emptyを返します。

}

于 2009-07-21T08:35:14.623 に答える
0

App_* ディレクトリ内のリソースを使用するコードをテストするためのアプローチを見つけました。ブログのリンクテキストで解決策を説明しました

于 2010-09-17T06:10:46.037 に答える