ASP.NET + Moq + аннотации данных + строки ресурсов - PullRequest
1 голос
/ 23 марта 2011

Я пытаюсь написать модульный тест для 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 Ответ

2 голосов
/ 23 марта 2011

Внутренне App_GlobalResources полагается на HttpContext, который недоступен в модульных тестах. Вот сообщение в блоге , в котором говорится об этой проблеме. Короче говоря:

избегайте App_GlobalResources и App_LocalResources (который имеет свой собственный множество проблем) в MVC.

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

...