Перемешивание LINQ To SQL провайдера данных, NotSupportedException в живом коде - PullRequest
3 голосов
/ 03 сентября 2010

Еще один «простой» вопрос об объектах модели модульного тестирования, использующих уровень доступа к данным.

Когда я высмеиваю свои Table<Customer> до IQuerable<ICustomer>, где new List<FakeCustomer>().AsQuerable() используется в роли хранилища данных в памяти, следующий код отлично проходит модульное тестирование:

var filteredCustomers = from c in dal.Customers
                        where c.Code.ToUpperInvariant() == "ABC"
                        select c;

При запуске приложения я, конечно, получаю NotSupportedException (из-за ToUpperInvariant()). Возможно, это довольно неудачный пример, потому что проблему можно исправить, заменив ToUpperInvariant() на ToUpper(), но вы поняли.

Вопрос: такое несоответствие - это «плата» за написание реального модуля, а не интеграционных тестов? Или, может быть, я что-то не так делаю, например, должен быть другой способ макетирования DataContext таким образом, чтобы он полностью эмулировал Linq To SQL DataContext?

В настоящее время я ставлю тестовую базу данных вместо проверки в памяти, чтобы перехватить такие ошибки.

Спасибо за ваши предложения.

1 Ответ

4 голосов
/ 04 сентября 2010

Да, это именно та плата, которую вы платите за то, что она не является интеграционным тестом.Конечно, неплохо иметь интеграционные и модульные тесты.

Трудно избежать такого рода проблем с ORM, по моему опыту - как вы собираетесь точно эмулировать весь SQL Server?без запуска SQL Server?Это не значит, что ORM бесполезны или что-то в этом роде - просто есть ограничения.

...