Как бы вы поменялись местами строки подключения для доступа к тестовой базе данных для модульного тестирования? - PullRequest
2 голосов
/ 22 июня 2009

Я настроил тестовую базу данных, чтобы начать модульное тестирование приложения, в которое я недавно был добавлен. Это трехуровневый дизайн (уровень представления, BOL и DAL), и я впервые пишу юнит-тесты.

Я решил начать с BOL, и я считаю, что лучший способ - поменять ConnectionString (которая была передана как Shared String) на тот, который указывает на мою новую тестовую базу данных. Однако я не хочу менять производственный код. Я просто хочу как-то перенаправить приложение в тестовую базу данных во время юнит-тестов. Как я могу добиться этого?

Ответы [ 4 ]

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

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

Вот базовый пример:

static ConfigurationSettings
{
     static String ConnectionString
     {
        get
        {
           var result = "TESTCONNECTIONSTRING";
           if (ConfigurationManager.ConnectionStrings["SOMEKEY"] != null)
               result = ConfigurationManager.ConnectionStrings["SOMEKEY"];
           return result;
     }
}

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

Причина, по которой я не выбираю маршрут с несколькими файлами конфигурации, заключается в том, что я не могу использовать файлы конфигурации при запуске в наборе тестов (например, в тестере NUnit).

1 голос
/ 22 июня 2009

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

Гораздо лучшая идея явно передать Зависимости в тестируемую систему (SUT) - предпочтительнов конструкторе.В вашем случае вы должны передать строку соединения в SUT через его конструктор.

Еще лучший подход - абстрагировать уровень доступа к данным за интерфейсом и передать экземпляр этого интерфейса в SUT.

Я немного написал о Императивная конфигурация , но в целом вам следует прочитать книгу Роя Ошерова Искусство юнит-тестирования - в ней много вопросовэти проблемы.

1 голос
/ 22 июня 2009

Ваша строка подключения происходит из файла конфигурации? Можете ли вы настроить соответствующий конфиг в своих модульных тестах?

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

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

Существует также возможность, если вы этого не сделаете (но вам, возможно, придется изменить производственный код). Пусть строка подключения будет введена через конструктор или установщик. Затем в производстве вы используете строку производственного соединения; и в тестах вы можете подключиться к вашей тестовой базе данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...