【问题标题】:Testcontainers oracle DB测试容器 oracle DB
【发布时间】:2022-01-14 14:29:36
【问题描述】:

我正在尝试使用 Testcontainers 和 Oracle-xe 数据库设置集成测试。 我收到以下错误:

application.properties 入口:spring.datasource.driver-class-name=org.testcontainers.jdbc.ContainerDatabaseDriver

Driver org.testcontainers.jdbc.ContainerDatabaseDriver claims to not accept jdbcUrl, jdbc:oracle:thin:@localhost:55802/xepdb1

我的测试扩展:

public class OracleDBContainerExtension implements AfterAllCallback, BeforeAllCallback {
      private OracleContainer container;

      @Override
      public void beforeAll(ExtensionContext context) {
        // gvenzl/oracle-xe:18.4.0-slim
        container = new OracleContainer();
        container.start();
        container.waitingFor(
            Wait.forListeningPort().withStartupTimeout(Duration.ofSeconds(180L)));
        System.setProperty("spring.datasource.url", container.getJdbcUrl());
        System.setProperty("spring.datasource.password", container.getPassword());
        System.setProperty("spring.datasource.username", container.getUsername());
      }

      @Override
      public void afterAll(ExtensionContext context) {
        container.stop();
      }
    }

测试:

    @Testcontainers
    @SpringBootTest
    @ExtendWith(OracleDBContainerExtension.class)
    public class HeroRepositoryTest {
      @Autowired
      private HeroRepository repositoryUnderTest;

      @Test
      public void shouldReturnHeroesSuccessfully() {
        System.out.println("junit version: " + Version.id());
        List<Hero> heroes = repositoryUnderTest.allHeros();
        assertThat(heroes).hasSize(1);
        repositoryUnderTest.addHero(new Hero("bb", "bb"));
        Collection<Hero> heroesAfter = repositoryUnderTest.allHeros();
        assertThat(heroesAfter).hasSize(2);
      }
    }

【问题讨论】:

标签: spring oracle testcontainers oracle-xe testcontainers-junit5


【解决方案1】:

来自关于 Testcontainers JDBC support 的文档 --

如果您使用 JDBC URL 支持,则无需实例化 容器的一个实例 - Testcontainers 会做 自动。

换句话说,应该使用ContainerDatabaseDriver 和带有tc: 前缀的JDBC URL,或者使用带有getJdbcUrl() 和原始驱动程序的容器实例(或者让系统为您检测驱动程序)。

因此,如果您将其设为普通的 Oracle 驱动程序: spring.datasource.driver-class-name=org.testcontainers.jdbc.ContainerDatabaseDriver,应该可以了。

【讨论】:

  • 谢谢。真巧,今天早上开始看你的 youtube 视频!
猜你喜欢
  • 2023-03-18
  • 1970-01-01
  • 2018-10-11
  • 1970-01-01
  • 2019-05-23
  • 2018-01-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多