我有一个包装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

有关如何测试此代码以及使用资源文件的其他代码的任何想法?

有帮助吗?

解决方案

我采取了略微不同的方法。我使用App_ *目录之外的资源文件,在这种情况下,IDE将向文件添加一个自定义工具,以便为在解决方案中的任何位置工作的资源生成强类型包装器,包括在视图中,并在单元测试期间执行: http://odetocode.com/Blogs/scott/archive/ 2009/07/15 / 13211.aspx

这不是你问题的确切答案,但我相信让App_ *资源在所有条件下都能正常运行是相当多的工作。

其他提示

您可以在ResourceExtensions类中创建一个属性,例如bool IsInTestScope,然后在您的测试类中将其设置为true,并且返回本地化文本的inside方法执行以下操作:

public static string Resource(此Controller控制器,字符串表达式,params object [] args)

{

if(!IsInTestScope)

{

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

返回GetGlobalResource(fields,args);

}

return string.Empty;

}

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top