Кирилл Толкачёв - Тестируем и плачем вместе со Spring Boot Test
ฝัง
- เผยแพร่เมื่อ 25 มี.ค. 2019
- Ближайшая конференция - Heisenbug 2024 Autumn, 10 октября (Online), 17-18 октября (Санкт-Петербург + трансляция).
Подробности и билеты: jrg.su/Tq0vcu
- Ближайшая конференция: Heisenbug 2023 Autumn - 10-11 октября (online), 15-16 октября (offline)
Подробности и билеты: bit.ly/3qd3swV
- - -
. . .Писать тесты с помощью Spring иногда не так просто, как кажется из примеров в статьях или из видео в интернете. Часто совсем непонятно, что за магия с контекстом там творится. Кирилл поможет разобраться с этим и разложит все знания по полочкам. Если ты видел аннотации в коде автотестов: @DirtiesContext, @ActiveProfiles, @SpringBootTest и др. и не понимал, что инициализируется - это тот самый доклад, что поможет разобраться.
Разработчик и тесты. Есть разные мнения, и Кирилл придерживается того, что разработчик должен создавать тесты. В этом докладе речь пойдёт про тесты, которые помогают разработчику писать код и верифицировать уже написанный код на уровне одного приложения.
Кирилл как Java-разработчик будет делать это с помощью привычных всем фреймворков JUnit и spring-boot-test, делая акцент на особенностях работы spring-boot-test при тестировании на границе различных компонент приложения (@RestController, @Component, @Service, Repository...). Он попробует развеять некоторую магию, которую фреймворк творит за вас, чтобы добавить осознанности в написание ваших тестов.
5/5 для QA, который не хочет читать спринговую документацию
Жесть в такие тесты потом смотреть - заглядываешь, а там куча конфигов своих, что-то куда-то инжектится, откуда-то берётся. По идее тесты должны быть живой документацией к коду. Запутался в коде, глянул в тесты, запустил, подебажил и въехал. А тут отдельный мир со своим контекстом и конфигами.
Spring сам по себе такой. В большинстве других фреймворках (на других языках) просто устанавливаешь библиотеку и юзаешь. А тут нужно конфиг файл запилить, содержимое которого только гуглежом можно получить, далее бины бины и бины, аннотации аннотации и аннотации.
далеко не всегда по тестам понимаешь что тест делает. Тем более обычно новичка (ну меня точно) поставили на испыталку писать тесты к 30 классам довольно сложным с Spark логикой к которой просто не было тестов. Да и тесты такая штука что можно написать 2+2 = 5 и всё будет проходить ещё так написать что никто не поймёт тесты это же ты сам ручками вводишь что ожидаешь.
Когда Кирилл без Жени все так спокойно, потихоньку xD
Господины критики, вам это не то и то не это. Ну сделайте лучше и выложите в общий доступ. Кирилл, спасибо за материал.
Вот бы час отлаживать обвязку к тестам 😆
Зачем сужать скоуп SpringBootTest если тесты всего приложения будут в этом скоупе, а контекст только один для всех тестов
Лучше бы показали как правильно тестировать на разных слоях, (как, куда и для чего писать юнит, интеграционные), а не вот это все, и кто вообще зависимости от классов делает ?
есть ли видео которое обьясняеет то что вы написали?
дело в том что ответ кроется не в какой то специфике спринга или его тестирования. ответ кроется в пирамиде тестирования (и реалиях в которых пишется код, например если времени мало а хочется побольше покрытия то будут использоваться e2e тесты с максимально "настоящей" интеграцией). В остальных случаях нужно выбирать золотую середину между количеством тестов (а как следствие качеством покрытия) и затраченным временем (в тч временем на поддержку)
@AutoConfigureTestDatabase(connection = EmbeddedDatabaseConnection.H2) и можно без TestContainers в некоторых простых случаях
по моему это самый худший вариант. тут без гугления никак не разобраться. спринг и так вынуждает изучать его тонкости так теперь и на каждую автоконфигурацию нужно гуглить.
Есть особенности синтаксиса SQL. И то что работает на проде (например Оракле) может не работать в H2
ребята поскажите пожалуйста если мы используем @SpringBootTest и в нем используем @TestConfiguration то если ли способ сказать спрингу чтобы бины из тестовой конфигуарции были всегда в приоритете над обычной конфигурацией? без эксплиситного указания @Primary?
можно ссылку на этот код?
github.com/lavcraft/spring-boot-curse
Поучись у Борисова обьяснять.
Попробуем использовать аннотацию SpringBootTest. А пишет SpringBootApplication. Сидишь и думаешь слушать дальше или нет