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