Поведение Subsonic 3 ActiveRecord Setup ()

Я долгое время пользовался Subsonic 2.x и немного использовал 3.x, но недавно я начал переходить от использования репозиториев к ActiveRecord. В настоящее время я натыкаюсь на некоторые из наших модульных тестов, и мне интересно, возможно ли это, потому что я неправильно понимаю цель метода Setup (). Увы, единственная документация, которую я могу найти, находится в блоге Роба Конери.

В своих модульных тестах я набиваю коллекцию объектов, скажем, Список учетных записей. Затем я хочу убедиться, что некоторый код правильно фильтрует репо по свойству, скажем, по адресу электронной почты. Моя (упрощенная) установка модульного теста приведена ниже.

Особенность заключается в том, что при использовании строк подключения "Test" кажется, что любой LINQ, который я пишу для репо, возвращает мне все записи, которые я вставил в Setup, которые заставляет меня задуматься, не понимаю ли я намерение Setup (). Это как если бы он вел себя как макет, например mymock.Setup (foo => foo.Email) .Returns ("[email protected]").


     List accounts = new List()
     {
        new Account() { FirstName = "Paul", LastName = "McCartney", Email = "[email protected]" },
        new Account() { FirstName = "John", LastName = "Lennon", Email = "[email protected]" },
        new Account() { FirstName = "Ringo", LastName = "Starr", Email = "[email protected]" },
        new Account() { FirstName = "George", LastName = "Harrison", Email = "[email protected]" },                
        new Account() { FirstName = "Taylor", LastName = "Swift", Email = "[email protected]" }
     };

     DB.Account.ResetTestRepo();
     DB.Account.Setup( accounts );

В другом месте код, который я пытаюсь выполнить для модульного тестирования, в основном выполняет Find (). Реальная реализация имеет полусложный набор условий, но даже упрощенные условия не работают.


  Account.Find(a => a.Email == "[email protected]").SingleOrDefault();

Вышеупомянутое будет бомбой с исключением, указывающим, что лямбда вернула несколько элементов. Когда я отлаживаю тест, результат Find () - это все объекты, которые я поместил в имитируемое репо с помощью метода Setup ().

Роб К. сетует на то, что ActiveRecord бывает сложно протестировать, а это обескураживает. Но я не могу представить, что сценарий тестирования ломается на таком приземленном образце - это ведь PEBKAC, верно?

Халп !?

Изменить:
Джош Риверс спрашивает, что похоже на вопрос, но, похоже, он не решен. Связывание для полноты.


person bakasan    schedule 29.12.2009    source источник


Ответы (1)


Собираюсь ответить на свой вопрос для будущих вечеринок, не то чтобы в этой ветке мчалась волна активности:

Оказывается, текущая реализация тестовых репозиториев (Subsonic 3.03) имеет ошибку, при которой она просто возвращает весь набор значений внутри репозитория. Текущее исправление (я не тестировал, но работал у других) - извлечь текущую основную строку исходного кода и перекомпилировать.

См. Subsonic Issue 109.

person bakasan    schedule 30.12.2009