Еще один «простой» вопрос об объектах модели модульного тестирования, использующих уровень доступа к данным.
Когда я высмеиваю свои 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?
В настоящее время я ставлю тестовую базу данных вместо проверки в памяти, чтобы перехватить такие ошибки.
Спасибо за ваши предложения.