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.

Предлагаемое решение заключается в перемещении файлов ресурсов за пределы специальных каталогов ресурсов.

Другие вопросы по тегам