2010-07-30 4 views
0

У меня есть веб-приложение, которое имеет 2 набора сервисов. Один набор - это бизнес-сервисы, такие как UserService и другой набор, который является сервисными службами, такими как EmailService. Как бизнес-услуги подключаются к коммунальным услугам через NServiceBus. Как вы выполняете интеграционные тесты в этом сценарии? То, что я сделал прямо сейчас, - это то, что я провел тест интеграции на 2 модульных теста. Сначала тестируется бизнес-сервис, а затем издевается над NServiceBus. Второй модульный тест находится в коммунальной службе, а затем выдает/проверяет отправку электронной почты. Как вы можете сказать, это совсем не оптимально. В настоящее время у нас есть два экземпляра NServiceBus - один как клиентский и один как сервер (на сервере есть дополнительные обработчики). Эта работа выполняется в обычном, не-тестовом режиме (поскольку клиент находится в контексте IIS, а сервер является автономным приложением), но когда я пытаюсь сделать это в тесте, кажется, что я не могу запустить два экземпляра? Любой совет?Как выполнить интеграционные тесты с NServiceBus?

ответ

2

Похоже, что вы выполняете Unit Testing правильно, издеваясь над внешней зависимостью от NServiceBus. Чтобы быть ясным, мое определение модульных тестов заключается в том, что они ничего не делают за пределами вашего кода (например, используя MSMQ). Для ваших интеграционных тестов вы должны уйти от чего-то очень простого, что доказывает, что вы можете передавать сообщение от одной системы к другой и, возможно, получить ожидаемый конечный результат. Чтобы установить это, вы можете запустить клиент/сервер NServiceBus из метода настройки вашего тестового прибора (и избавиться от них в режиме разрыва). Не имеет значения, являются ли они EXE или запускаются в IIS - вы должны иметь возможность программно запускать/останавливать их из своего теста, даже если это означает вызов Process.Start() или что-то подобное.

В качестве альтернативы, если ваши интеграционные тесты выполняются на сервере сборки в рамках непрерывной интеграции, сценарий сборки может гарантировать, что надлежащие процессы выполняются до начала запуска ваших тестов, что, скорее всего, приведет к более повторяемости и ускорению Результаты. Используя комбинацию TeamCity и MSBuild или NAnt, довольно легко сделать что-то подобное.

+0

Хммм, я бы не согласился с тем, что он «правильно выполняет модульное тестирование». Не издевайтесь над тем, что у вас нет. Тот факт, что ему нужно издеваться над NServiceBus, указывает на то, что он, возможно, не смог отвлечь зависимость от шины. Другими словами, объекты политики высокого уровня зависят от деталей низкого уровня. Он должен иметь возможность единично тестировать объекты изолированно, возможно, используя шпион вместо шины для наблюдения за желаемым поведением объектов, опять же, в изоляции. (см. ниже) – fourpastmidnight

+0

(продолжение сверху) Затем, как он правильно замечает, он также должен иметь интеграционные тесты, чтобы проверить, что взаимодействие между всеми участниками (включая шину) работает по назначению (например, сообщения отправляются/полученные их соответствующими объектами, как ожидалось, по шине). – fourpastmidnight

Смежные вопросы