0

我正在尝试使用 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);
      }
    }
4

1 回答 1

1

来自关于Testcontainers JDBC 支持的文档——

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

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

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

于 2021-12-09T22:38:48.907 回答