测试容器oracle数据库



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

application.properties条目:spring.datasource.driver类名=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);
}
}

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

如果您使用JDBC URL支持,则无需实例化容器的实例-Testcontainers将执行此操作自动地。

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

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

最新更新