Есть ли хороший способ запустить один набор тестов с двумя различными AssemblyStartups - PullRequest
1 голос
/ 05 июня 2009

Я работаю над довольно стандартным приложением ASP.NET MVC. У нас есть основная логика, лежащая в основе набора сервисов, и мы используем StructureMap, чтобы внедрить соответствующие экземпляры соответствующих IRepositories, чтобы абстрагировать связь с соответствующим уровнем данных. Мы также получили довольно исчерпывающую серию модульных тестов для этих сервисов. Но, как сейчас обстоят дела, модульные тесты взаимодействуют с набором поддельных репозиториев, использующих графы объектов в памяти для представления базы данных.

Я хотел бы найти хороший способ использовать тот же набор тестов, поддерживаемый базой данных и нашими репозиториями Linq2Sql. Теперь я вижу довольно гетто способ сделать это, используя директивы компилятора #if () и некоторые флаги, но я подозреваю, что есть лучший способ добиться этого. Есть предложения?

EDIT:

Джеймс ответил на первоначальный вопрос, но он также дал мне понять, что я не совсем понял, каковы мои цели здесь.

Я хотел бы, чтобы это выглядело, по крайней мере, для бегуна-испытателя (в настоящее время Gallio) в виде двух отдельных сборок. Основная причина в том, что я могу запускать модульные и интеграционные тесты отдельно и избежать полной зависимости от БД.

Ответы [ 2 ]

2 голосов
/ 05 июня 2009

Конечно, просто добавьте параметры в AssemblyFixture.

[AssemblyFixture] открытый класс AssemblyStartup { [Строка ( "в памяти-база-соединение-строка")] [Row ( «в режиме реальных баз данных соединение строка»)] открытая строка ConnectionString;

[FixtureSetUp]
public void SetUp()
{
    ... set up my repositories using ConnectionString above...
}

}

Что произойдет, так это то, что все приборы и сборочное приспособление Setup () будут запускаться дважды, каждый раз используя разные значения ConnectionString.

0 голосов
/ 06 июня 2009

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

Может случиться, что некоторые тесты не будут иметь смысла при использовании реального БД или при использовании поддельного БД. Поэтому в этой ситуации я иногда создаю копию файла проекта (в той же папке), а затем использую символы препроцессора и #if / #endif для условного включения разных частей из каждого проекта.

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

В будущей версии Gallio появится функция для передачи параметров извне. Таким образом, вы можете иметь поддельный «тестовый профиль» Db и настоящий «тестовый профиль» Db - все в одной сборке.

Один из способов имитации «профиля теста» прямо сейчас - использовать переменную среды для передачи информации в тесты извне. Просто установите переменную среды перед запуском тестов и прочитайте ее из тестовой сборки. Если переменная окружения не установлена, вы можете запросить пользователя в интерактивном режиме. (Конечно, обязательно установите переменную окружения на сервере сборки!)

...