ASP.NET + Moq + аннотации данных + строки ресурсов

Я пытаюсь написать модульный тест для модели Action, которая использует аннотации данных для проверки членов. Я использую Moq в качестве своей насмешливой структуры.

Когда я «жестко кодирую» сообщение об ошибке [Required] для свойства, все работает отлично. Я могу запустить свой тест просто отлично, и результаты теста ожидаются. Однако мне нужно, чтобы сообщения об ошибках исходили из файла ресурсов. Итак, вместо того, чтобы делать:

 [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 с аннотациями данных, не говоря уже об аннотациях данных со строками ресурсов. Может кто-нибудь, пожалуйста, скажите мне, что я делаю неправильно?


person Sharbel    schedule 22.03.2011    source источник


Ответы (1)


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

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

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

person Darin Dimitrov    schedule 23.03.2011
comment
Большое спасибо, Дарин, этот пост в блоге был точным ответом на мой вопрос. Очень признателен! - person Sharbel; 23.03.2011