2015-03-16 4 views
2

Я создаю приложения mule, которые синхронизируют данные между различными системами, службами и API.Что тестировать и когда?

Мой Мул приложение примерно следующим образом:

  1. опрашивать HTTP конечной точку, чтобы получить некоторую информацию пользовательских
  2. Обогатить сообщение с идентификатором пользователя от службы пользователя
  3. преобразования данных для другой службы
  4. Вызовите другую услугу с преобразованными данными.

То, что я должен испытывать здесь,

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

Но нужно ли тестировать начало опроса? Что называется каждой конечной точкой? Будет ли это интеграционное тестирование?

ответ

2

Что для меня работает, так это убедиться, что я определяю «единицы» моего программного обеспечения таким образом, чтобы я мог проверить только то, что касается моего приложения, а не аспекты, которые могут измениться, если мне нужно реорганизовать. В приложениях Mule ESB это иногда оставляет мне очень мало модульных тестов, которые выглядят похожими на те, которые я написал в java-программе. Большинство моих модульных тестов наследуются от FunctionalTestCase и включают некоторое количество двойных тестов в процессе для реальных систем, которые мне нужно интегрировать.

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

Для вашего приложения, я мог бы создать тесты следующим образом:

  1. Убедитесь, что первый HTTP конечная точка правильно опрашивается (HTTP GET с некоторыми информационными пути и запроса параметров я бы предположить)
  2. Учитывая определенный ID, возвращаемый из пользовательской службы, убедитесь, что целевая служба вызывается правильно с преобразованным сообщением
  3. Если логика преобразования сложна, я могу добавить несколько тестов, которые исследуют различные случаи кромок, чтобы убедиться, что мое преобразование работает правильно.
  4. Много раз веб-сервисы требуют определенных заголовков или токены авторизации, поэтому я часто создают несколько тестов, убедившись они находятся в месте

Обратите внимание, что я явно не проверить, что мое сообщение получает «обогащенный» или «трансформируются» в середине -flow, потому что эти шаги являются лишь средством достижения цели. Если вы решите перейти к трансформации в два этапа или использовать XSLT вместо java, эти тесты не нужно будет менять.

Чтобы сделать тестовый процесс в процессе работы для ваших HTTP-сервисов, просмотрите sham-http.

+0

Спасибо за отличный ответ. Кроме того, как вы называете себя тестовыми классами и методами? Поскольку метод тестирования охватывает довольно много функциональности и на самом деле не соответствует точно так же, как вы бы протестировали Java-метод, как вы сказали. –

+0

Некоторые примеры могут быть validUser_shouldBePostedToAccountsService() или expiredUser_shouldBeDeletedFromAccountsService() для тестов типа преобразования. Другие выглядят как accountService_shouldReceiveAuthorizationHeader() и connectionRefusedToAccountService_shouldRetryThreeTimes() –

0

Что касается тестирования кода Mule, я бы порекомендовал три набора таких тестов.

  1. Единицы измерения. Тестирование всего кода независимо от их правильности.
  2. Функциональное тестирование. Тестирование потоков мула и субпотоков, чтобы убедиться, что потоки работают должным образом. Для этого FunctionalTests может использоваться org.mule.tck.junit4.FunctionalTestCase. Все вызовы внешних служб и приложений должны быть заштрихованы в этой последовательности, чтобы избежать зависимости от внешних факторов во время тестирования.
  3. Тестирование интеграции. Тестирование интеграции со всеми внешними службами и приложениями. Эти тестовые шкафы почти похожи на функциональные тестовые модули Mule, за исключением того, что вызовы фактически выполняются для внешних интегрирующих служб.

Прикрывая все эти три категории тестовых ящиков, мы можем быть уверены, что служба Mule полностью функциональна.

Что необходимо проверить, это всегда требование и комфорт каждого отдельного проекта.

Надеюсь, это поможет.

0

Согласен, было сказано здесь, но только комментарий. Что касается модульного теста, то нужно рассмотреть две вещи. Сначала создайте свой собственный Java-код, который всегда должен быть проверен модулем. Но вы также можете выполнить единичный тест вашего приложения Mule. Для этого Мул предлагает Munit. Munit - это тестовая среда, которая, помимо прочего, позволяет вам создавать mocks обработчиков сообщений, а также выполнять проверки вызова процессоров сообщений.

Munit частично основан на org.mule.tck.junit4.FunctionalTestCase, поэтому вы можете сделать то же самое, но у вас будет больше возможностей с Munit.

Также, пожалуйста, проверьте эту другую ссылку, которая может помочь Mule testing best practices and functional vs unit

Ура!