ASP.NET + Moq +数据注释+资源字符串

时间:2011-03-22 21:42:30

标签: asp.net-mvc unit-testing moq data-annotations

我正在尝试为一个Action使用Data Annotations来验证成员的Action进行单元测试。我使用Moq作为我的模拟框架。

当我'硬编码'属性的[必需]错误消息时,一切都很好。我能够很好地运行我的测试,并且测试结果是可以预期的。但是,我需要从资源文件中获取错误消息。所以不要这样做:

 [Required(ErrorMessage = "First Name is required")]
    public string FirstName
    {
        get;
        set;
    }

我需要这样做:

 [Required(ErrorMessageResourceName = "Account_FirstNameRequired", ErrorMessageResourceType = typeof(Resources.ModelValidationErrors))]
    public string FirstName
    {
        get;
        set;
    }

当我使用基于资源的字符串时,它工作正常..但是,当我尝试运行我的测试时,我收到以下错误:

  

测试方法MyProject.Tests.Controllers.AdminAccountsTest.AdminAccounts_Create_Calls_Save引发异常:   System.Reflection.TargetInvocationException:调用目标抛出了异常。 ---> System.IO.FileNotFoundException:无法加载文件或程序集“App_GlobalResources”或其依赖项之一。系统找不到指定的文件.WRN:程序集绑定日志记录已关闭。   要启用程序集绑定失败日志记录,请将注册表值[HKLM \ Software \ Microsoft \ Fusion!EnableLog](DWORD)设置为1。   注意:程序集绑定失败日志记录会导致一些性能损失。   要关闭此功能,请删除注册表值[HKLM \ Software \ Microsoft \ Fusion!EnableLog]。

不可否认,我是使用Moq的新手。我已经搜索过了,我没有太多运气找到Moq with Data Annotations的例子,更不用说资源字符串的Data Annotations了。有人可以告诉我我做错了吗?

1 个答案:

答案 0 :(得分:2)

内部App_GlobalResources依赖于单元测试中不可用的HttpContext。这是一个blog post,讨论这个问题。简而言之:

  

避免App_GlobalResources和   App_LocalResources(有自己的   一组问题)在MVC中。

建议的解决方案是将资源文件移到特殊资源目录之外。