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

时间:2009-06-22 07:25:29

标签: asp.net-mvc unit-testing globalization

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

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

3 个答案:

答案 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

中描述了我的解决方案