Повторное использование дорогих бобов в Spring Boot Tests - PullRequest
1 голос
/ 05 августа 2020

Я пытаюсь повысить производительность тестов medium в Spring Boot.

Я использую библиотеку Spring Boot - testcontainers .

Для индивидуального теста это работает очень хорошо, с несколькими аннотациями я могу получить доступ к kafka, zookeeper и schema-registry. Это полные службы, поэтому для запуска всего требуется несколько секунд, а в целом настройка занимает около 40 секунд. Тест точно воссоздает реалистичное развертывание c, это красиво просто.

Это было бы хорошо, если бы это произошло всего один раз, но это происходит каждый раз, когда создается контекст Spring. Это означает, что каждый тест, использующий @MockBean, требует затрат 40 секунд.

Я пробовал рефакторинг в один класс TestConfiguration и ссылался на него. Я изучал использование ContextHierarchy, но думаю, это означает, что я потеряю все тонкости Spring Boot, и мне нужно будет воссоздать контекст (что означает, что он не будет выглядеть точно так, как контекст, созданный производственным приложением).

Есть способ сделать это лучше?

1 Ответ

1 голос
/ 06 августа 2020

Среда Spring уже позаботилась об этом сценарии.

Существует концепция кэширования контекста приложения для тестового класса / классов. См. Документацию . .

Несколько строк из документации:

Фреймворк Spring TestContext хранит контексты приложений в кэше stati c. Это означает, что контекст буквально хранится в переменной stati c. Другими словами, если тесты выполняются в отдельных процессах, статистический c кеш очищается между каждым выполнением теста, что фактически отключает механизм кэширования.

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

Но используйте эту возможность с умом, если не продумать должным образом, это может привести к нежелательным побочным эффектам

...