Я пытаюсь отсеять множество тестовых решений, и я даже не уверен, что иду правильное направление. История такова: мы запускаем веб-службу RESTful, реализованную как приложение Rails, которое поддерживает наших мобильных клиентов. Мы модульное тестирование веб-службы (конечно), но это включает в себя имитацию многих частей приложения, например, стека поиска (Apache SOLR).
Более того, наши тесты этого не делают (т.е. не могут!) охватывают критические маршруты, такие как мобильный процесс входа в систему / входа в систему, поскольку он включает в себя взаимодействие между приложением API и мобильным веб-сайтом, где пользователь может ввести учетные данные, например для SSO (Janrain Engage). Следовательно, стандартный интеграционный тест Rails не годится.
Я понимаю, что теоретически, если набор тестов очень хорошо спроектирован, когда имитация выполняется строго в тех точках соединения, где начинаются тесты для следующего уровня, тогда Путем модульного или функционального тестирования API сервиса и мобильного веб-сайта по отдельности можно получить одинаковое тестовое покрытие. Я считаю, что на практике это иллюзия, если у вас есть несколько разработчиков, работающих над набором тестов независимо; Я просто признаю, что наши модульные тесты просто не так хорошо разработаны. В частности, при выполнении TDD я обнаружил, что хотя тесты могут управлять кодом приложения,дизайн тестового кода адаптирован только к тестируемому модулю, в результате чего получается довольно сильно разросшийся набор тестов.
Еще я обнаружил, что иногда мы не обнаруживали регрессии исключительно с помощью модульных тестов, где, например, неверные запросы были отправлены на сервер SOLR из-за эффектов постукивания. Вот почему я подумал, что единственный верный способ гарантировать, что весь стек работает по критическим маршрутам, - это автоматическое сквозное тестирование его на промежуточном сервере перед каждым развертыванием, т.е. отправка реальных HTTP-запросов в приложение.
У меня будут следующие вопросы: