ASP.NET + Moq + аннотации данных + строки ресурсов
Я пытаюсь написать модульный тест для 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 с аннотациями данных, не говоря уже о аннотациях данных со строками ресурсов. Может кто-нибудь сказать, пожалуйста, что я делаю не так?
1 ответ
Внутренне App_GlobalResources
опирается на HttpContext
который не доступен в модульных тестах. Вот сообщение в блоге, в котором говорится об этой проблеме. Короче:
Избегайте App_GlobalResources и App_LocalResources (который имеет свой собственный набор проблем) в MVC.
Предлагаемое решение заключается в перемещении файлов ресурсов за пределы специальных каталогов ресурсов.