1

我有一个包装 GetGlobalResourceObject 和 GetLocalResourceObjet 的类,因此它们可以在 MVC 中轻松使用。然后模型验证类从资源文件中动态加载错误消息。问题是单元测试。代码使用“~/”,虽然在运行解决方案时一切正常,但我看不到如何进行单元测试,因为我总是收到以下错误“System.Web.HttpException:应用程序相对虚拟路径'~/ ' 不能设为绝对,因为应用程序的路径未知。”

引发异常的代码如下,用于计算表达式并返回全局资源对象。

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,并在返回本地化文本的内部方法执行以下操作:

公共静态字符串资源(此控制器控制器,字符串表达式,参数对象[] args)

{

如果(!IsInTestScope)

{

ResourceExpressionFields fields = GetResourceFields(expression, "~/");

返回GetGlobalResource(字段,参数);

}

返回字符串。空;

}

于 2009-07-21T08:35:14.623 回答
0

我找到了测试使用 App_* 目录中资源的代码的方法。我在博客链接文本中描述了我的解决方案

于 2010-09-17T06:10:46.037 回答