Asp.net mvc asp.net mvc中本地和全局资源的单元测试

Asp.net mvc asp.net mvc中本地和全局资源的单元测试,asp.net-mvc,unit-testing,globalization,Asp.net Mvc,Unit Testing,Globalization,我有一个类包装了GetGlobalResourceObject和GetLocalResourceObjet,以便在MVC中轻松使用。然后,模型验证类从资源文件动态加载错误消息。问题在于单元测试。代码使用“~/”,虽然解决方案运行时所有功能都正常,但我看不到如何进行单元测试,因为我总是收到以下错误“System.Web.HttpException:应用程序相对虚拟路径“~/”不能设置为绝对路径,因为到应用程序的路径未知。” 引发异常的代码如下,用于计算表达式并返回全局资源对象 Private Fu

我有一个类包装了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将向该文件添加一个自定义工具,以便为解决方案中任何位置(包括视图中)工作的资源生成强类型包装,并在单元测试期间表现:


这并不是你问题的确切答案,但我相信让应用程序资源在所有条件下都能正常运行是一项相当艰巨的工作

我采取了稍微不同的方法。我使用App_*目录之外的资源文件,在这种情况下,IDE将向该文件添加一个自定义工具,以便为解决方案中任何位置(包括视图中)工作的资源生成强类型包装,并在单元测试期间表现:


这并不是你问题的确切答案,但我相信让应用程序资源在所有条件下都能正常运行是一项相当艰巨的工作

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

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

{

如果(!IsInTestScope)

{

ResourceExpressionFields=GetResourceFields(表达式“~/”

返回GetGlobalResource(字段、参数)

}

返回字符串。空


}

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

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

{

如果(!IsInTestScope)

{

ResourceExpressionFields=GetResourceFields(表达式“~/”

返回GetGlobalResource(字段、参数)

}

返回字符串。空


}

我找到了一种测试代码的方法,该代码使用App_*目录中的资源。
我在我的博客中描述了我的解决方案,我找到了一种测试代码的方法,该代码使用App_*目录中的资源。
我在我的博客中描述了我的解决方案

谢谢,这不是我问题的确切答案,但效果很好!谢谢,这不是我问题的确切答案,但效果很好!