Feign with Ribbon: сбросить

Мы пытаемся использовать Feign + Ribbon в одном из наших проектов. В рабочем коде у нас нет проблем, но у нас есть несколько в тестах JUnit.

Мы пытаемся смоделировать количество ситуаций (сбой служб, нормальный запуск, исключения и т. Д.), Поэтому нам нужно много раз настраивать ленту в нашем интеграционном тесте. К сожалению, мы заметили, что даже когда мы разрушаем контекст Spring, часть состояния все еще сохраняется, вероятно, где-то в статических переменных (например: новые тесты все еще подключаются к балансировщику из предыдущего набора).

Есть ли рекомендуемый способ, как очистить статическое состояние обоих этих инструментов? (что-то вроде Hystrix.reset())

Заранее спасибо!


Мы попытались сбросить JVM после каждого пакета - он работает отлично, но не очень практично (мы должны настроить его как в Gradle, так и в Idea (так как тестовый тюнер Idea не учитывает это из коробки)). Мы также пытались переименовать службу между тестами - это работает, скажем, на 99% (иногда по какой-то причине происходит сбой...).

1 ответ

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

Кроме того, может оказаться полезным проводить четкие различия между различными типами тестов. Это не похоже на то, что вы делаете мне тестовый модуль. Несмотря на то, что вы просто моделируете эти сервисы и симулируете сбои, этот вид теста действительно является интеграционным тестом, потому что вы тестируете, правильно ли настроена лента с вашими собственными компонентами, что на самом деле является интеграционным тестом. Было бы модульным тестом, если бы вы тестировали только то, что ваш компонент правильно конфигурирует ленту, не уверен, что я понял, ха-ха, это тонкое различие, но оно имеет большое значение в вашем тесте.

С другой стороны, не отклоняйте то, что у вас сейчас, как обязательно плохую идею. Может быть очень полезно провести несколько тяжелых интеграционных тестов, проверяющих поведение Feign, если это критически важная функция, IMO - отличная идея в этом случае. Но это тест на интеграцию с большим весом и должен рассматриваться как таковой. Возможно, вы даже захотите использовать какое-то магическое средство контейнера для выполнения такого рода теста со службами, которые не работают в различных сценариях сбоев. Это будет жить в CI, и обычно разработчики не запускают этих ребят с каждым коммитом, если они не работают напрямую с частью функциональности, касающейся интеграции.

Другие вопросы по тегам