Можно ли издеваться над версией 'Database' для корпоративной библиотеки 5? Если да ... как?
Нет интерфейса IDatabase (что является загадкой, так как я думаю, что Microsoft P & P больше расскажет о преимуществах тестируемости предоставления такого интерфейса).
У меня есть класс репозитория, который использовал EntLib 5 Data Access Application Block
Я тестирую юнит-тесты в этом классе, и мне нужно смоделировать зависимость от объекта Database. Этот класс теперь передал базу данных через ее конструктор и использует объект базы данных для выполнения операций с БД.
Я использую следующее, чтобы разрешить передачу экземпляра базы данных в мой репозиторий:
Container.RegisterType<IFooRepository, FooRepository>(
new InjectionConstructor(
EnterpriseLibraryContainer.Current.GetInstance<Database>("FooDbConnStr")
)
);
Я не хочу, чтобы эти модульные тесты стали интеграционными тестами.
Я пытался использовать Moq для создания динамического макета типа Database, но это оказалось непросто, так как Database требует строку подключения и DbProviderFactory в своем конструкторе. Возможно, если бы существовала такая вещь, как MockDbProviderFactory .
Это форма, которую принимает модульный тест:
В стороне: я также нахожу использование класса статического регистратора очень трудным для тестирования , Надеюсь, мне здесь не хватает какой-то хитрости, но я должен сказать, что пока разочарован тестируемостью.