Spring Boot. 9.2 Test containers. Использование

Поделиться
HTML-код
  • Опубликовано: 26 янв 2025

Комментарии • 32

  • @leereid2915
    @leereid2915 4 года назад +2

    10 тысяч лайков! Спасибо

    • @dmdev
      @dmdev  4 года назад

      Всегда пожалуйста! Рад, что смотрите мой канал :)

  • @ЕвгенийНовосельцев-д2т

    Спасибо большое, теперь один всем известный проект будет покрыт тестами))

    • @dmdev
      @dmdev  3 года назад +1

      Это это проект такой всем известный?)

  • @BattlegroundsHearthstoneHub
    @BattlegroundsHearthstoneHub 3 года назад +2

    Большое спасибо за помощь! Вы меня спасли)
    Подскажите, как настроить разноцветные скобки?

    • @dmdev
      @dmdev  3 года назад

      Всегда пожалуйста)
      Про скобки и прочее я рассказывал в level 1 плейлисте:
      Java для начинающих. 5.2 Полезные возможности Intellij IDEA

  • @АлександрВласов-р4х
    @АлександрВласов-р4х 4 года назад +2

    Для использования testcontainers вместе с junit5 удобнее задействовать зависимость org.testcontainers:junit-jupiter

    • @dmdev
      @dmdev  4 года назад

      Спасибо, не использовал ее. А в чем удобство?

  • @Andrzej3935
    @Andrzej3935 2 года назад +1

    Спасибо!

    • @dmdev
      @dmdev  2 года назад

      Советую проходить мои курсы по порядку, согласно Java Roadmap (ссылка есть под каждым видео taplink)

  • @alexandr7722
    @alexandr7722 3 года назад +1

    Здорово)

    • @dmdev
      @dmdev  3 года назад

      Рад, что вам понравилось

  • @ekaterinagalkina7303
    @ekaterinagalkina7303 4 года назад

    Спасибо!
    (Замечу, что статическая переменная инициализируется не при первом обращении, а при создании класса Postgres, еще до instance-переменных).

    • @dmdev
      @dmdev  4 года назад

      Нет, все верно было сказано в видео :)
      Все статические поля инициализируются при первом использовании методов/полей этого класса, именно в этот момент происходит загрузка класса в память с помощью загрузчика классов (class loader). Это сделано с целью уменьшить время старта Java приложений (в больших проектах классов десятки тысяч). Своего рода - это lazy loading.
      Вы можете это проверить сами, просто расставив точки остановки (breakpoints) в нужных местах и запустив программу в режиме отладки (debug).

    • @ekaterinagalkina7303
      @ekaterinagalkina7303 4 года назад

      @@dmdev а, вы смысле при загрузке класса - тогда да. А то я поняла как при первом обращении к этой самой статической переменной (а не при первом обращении к любой переменной или методу).

    • @dmdev
      @dmdev  4 года назад

      А в этом классе всего одно единственное статическое поле)

  • @Papont
    @Papont 3 года назад +1

    Почему то, в class Postgres не видно класс PostgreSQLContainer несмотря на то, что testcontainers нормально инициализировался , приедлагает добавить либу в classpathно не добавляет

    • @dmdev
      @dmdev  3 года назад

      Gradle используете?

    • @Papont
      @Papont 3 года назад +1

      да удалось пофиксить, добавив доп строку compile для testcontainers

    • @dmdev
      @dmdev  3 года назад

      @@Papont

    • @Papont
      @Papont 3 года назад

      Я думаю был неправ, тк по невнимательности создал class Postgres в src, а потом я узрел его в test и все сошлось, но увидел, что версия докер контейнера который устанавоивали и тот кого прописывали в интеграционном тесте тоже отличаются, по итогу testconteiner не стартует (
      Единственный урок сначала курса по spring-boot который не удалось пройти, а так ваши видео очень акутальный и просты для понимания, после них хочется разбираться дальше... Прошк не забрасывайте тему Spring-boot. Спасибо!!!

    • @dmdev
      @dmdev  3 года назад

      @@Papont Ну так версию ведь соблюдать надо. В чем ошибка сейчас?

  • @yuriyleshchenko9650
    @yuriyleshchenko9650 4 года назад +1

    у меня без следующих настроек контейнера почему то не заработало:
    .withDatabaseName("home_db")
    .withUsername("postgres")
    .withPassword("postgres")
    .withExposedPorts(5432)
    .withCreateContainerCmdModifier(cmd -> {
    cmd
    .withHostName("localhost")
    .withPortBindings(new PortBinding(Ports.Binding.bindPort(5432), new ExposedPort(5432)));
    });

    • @dmdev
      @dmdev  4 года назад

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

    • @yuriyleshchenko9650
      @yuriyleshchenko9650 4 года назад +1

      ​@@dmdev​ проблему решил без куска кода выше, ошибка была в том, что один из тестов использовал liquibase-пропертя из application.properties, которые имели другие port, user и password.
      Проблему решил добавив наследование от IntegrationTestBase а так же пришлось переопределять эти пропертя в методе iinitialize().
      TestPropertyValues.of(
      "spring.datasource.url=" + container.getJdbcUrl(),
      "spring.datasource.username=" + container.getUsername(),
      "spring.datasource.password=" + container.getPassword(),
      "spring.liquibase.url=" + container.getJdbcUrl(),
      "spring.liquibase.user=" + container.getUsername(),
      "spring.liquibase.password=" + container.getPassword()
      ).applyTo(applicationContext);

    • @dmdev
      @dmdev  4 года назад +1

      Так ты использовал другую библиотеку с другими пропертями для коннекшена к базе. Поэтому да, проблема была в другом. Молодец, что разобрался!

  • @maksymmatlo4327
    @maksymmatlo4327 2 года назад

    Не поднимается контекст и сервис не автовайрится.

    • @dmdev
      @dmdev  2 года назад

      Значит что-то ты делаешь не так)