У нас есть несколько тестов, которые мы запускаем из сценария оболочки. Они звонят в систему A, которая, в свою очередь, вызывает систему B. Поэтому мы имеем 3 отдельных JVM. Эти тесты полностью автоматизированы и выполняются без какого-либо вмешательства человека в систему дженкинсов.Какой самый простой способ перехватить http-звонки из junit?
Как часть моего теста, я хочу перехватить вызовы от A до B и проверить различные вещи о содержании. Звонок по-прежнему должен доходить до B, и ответ B должен быть возвращен без изменения к A.
Система A имеет конфигурацию, чтобы указать, где находится B. Все они работают на моей локальной машине, поэтому очевидным вариантом является запуск HTTP-сервера (возможно, причала) из теста, настройка A для разговора с моим временным сервером, а затем, когда я запустил свой тест, сервер увидит весь трафик отправляется с A на B. Затем ему необходимо передать эти запросы в B, получить ответ и вернуть ответ на A. Затем блок-тест должен видеть содержимое каждого запроса как String и выполнять некоторые проверки на нем ,
Я сделал что-то подобное в прошлом, используя причал. Мое предыдущее решение для заглушки делало что-то очень похожее: вместо того, чтобы проксировать вызовы в другую систему, он просто проверял запрос и возвращал фиктивный ответ. Мы ограничены использованием причала 6.1 - использование другой версии было бы неплохо, но PITA.
Я думаю, что пристань может быть лучшим решением. Я мог бы сделать это очень просто, расширив AbstractHandler
, а затем создав новый http-вызов в систему B. Но это было бы немного грязно. Есть простой, стандартный способ сделать это?
Просто замечание по терминологии: то, что вы здесь описываете, не является единичным тестом. Это интеграционный тест. – Henry
Адвокат дьявола здесь, но вы абсолютно должны видеть, что запросы «в пути»? Может быть проще иметь набор тестов, которые попадают только в службу B, и убедиться, что его ответы верны, а затем вытереть B для тестирования A и, наконец, протестировать весь процесс целиком, но используя ответы от A чтобы убедиться, что B выполнил свою работу правильно? Вероятно, это связано с написанием большего количества кода, но в большинстве случаев я бы предположил, что тестовый код будет намного проще и проще в обслуживании. Вероятно, это также ускорит и упростит выявление причин сбоев. – DaveyDaveDave
Да, действительно, это, безусловно, не модульные тесты. вопрос обновлен. – mdarwin