Mocking Enterprise Lib 5 'База данных'

Можно ли издеваться над версией '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 .

Это форма, которую принимает модульный тест:

EntLib UnitTest Attempt to Mock Database

В стороне: я также нахожу использование класса статического регистратора очень трудным для тестирования , Надеюсь, мне здесь не хватает какой-то хитрости, но я должен сказать, что пока разочарован тестируемостью.

6
задан holsee 18 August 2010 в 10:34
поделиться