我有一个包装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
有关如何测试此代码以及使用资源文件的其他代码的任何想法?
答案 0 :(得分:4)
我采取了略微不同的方法。我使用App_ *目录之外的资源文件,在这种情况下,IDE将向文件添加一个自定义工具,以便为在解决方案中的任何位置工作的资源生成强类型包装器,包括在视图中,并在单元测试期间执行: http://odetocode.com/Blogs/scott/archive/2009/07/15/13211.aspx
这不是你问题的确切答案,但我相信让App_ *资源在所有条件下都能正常运行是相当多的工作。
答案 1 :(得分:0)
您可以在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;
}
答案 2 :(得分:0)
我找到了测试使用App_ *目录中的资源的代码的方法。 我在我的博客link text
中描述了我的解决方案