Использование MSTest для тестирования нескольких типов баз данных - PullRequest
1 голос
/ 04 июля 2011

В настоящее время я занимаюсь разработкой приложения, которое подключается к нескольким механизмам баз данных (2 прямо сейчас, но в будущем это будет расти), но выполняет аналогичные функции для каждой базы данных. Я хотел бы разработать набор модульных тестов, которые мне нужно написать только один раз, но которые можно запустить на другом движке базы данных. Это приложение будет чрезвычайно сложным, и я предсказываю, что буду писать для него сотни, если не тысячи тестов.

Например, у меня есть метод, который извлекает все базы данных, доступные на сервере баз данных, и у меня есть два класса, которые имеют один и тот же интерфейс, который определяет метод GetDatabases (). Я хотел бы разработать один метод, который создает экземпляр класса, который реализует IDatabaseEngine, и вызвать метод GetDatabases () для него.

Затем я хочу вызвать этот метод один раз с моим классом MySQLDatabaseEngine и еще раз с моим классом SqlServerDatabaseEngine и проверить вывод.

В настоящее время я использую MSTest, потому что это то, с чем я больше всего знаком, но я не против переключения моего тестового движка, если он окажется неподходящим для этой задачи. Поскольку я только начал этим утром, я написал только три теста для этого, поэтому переключение не будет проблемой вообще.

Может даже не потребоваться сделать что-то другое с конфигурацией MSTest, но разработать некоторый тип тестового жгута внутри MSTest, чтобы дважды запустить метод с различными параметрами. Тем не менее, я хотел бы избежать любой ситуации, когда я должен

Я подумал о генерации кода, но мне бы очень хотелось этого избежать.

1 Ответ

1 голос
/ 04 июля 2011

у вас также могут быть частные тестовые методы, которые принимают реализацию интерфейса в качестве параметра, и вы вызываете их дважды с одним или другим классом (mySql или SQL Server), таким образом, у вас есть один или два абонента (лучше два), но тестсам по себе написан только один раз.

Или, вы можете успешно использовать внедрение зависимостей, чтобы получить то, что вам нужно, у меня не очень большой опыт работы с DI, но, как я слышал, здорово высмеивать и упрощать этишаблоны использования, среди множества других преимуществ.

Поиск по NInject или Unity.

...