我正在尝试为一个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了。有人可以告诉我我做错了吗?
答案 0 :(得分:2)
内部App_GlobalResources
依赖于单元测试中不可用的HttpContext
。这是一个blog post,讨论这个问题。简而言之:
避免App_GlobalResources和 App_LocalResources(有自己的 一组问题)在MVC中。
建议的解决方案是将资源文件移到特殊资源目录之外。