Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/397.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java junit5中带有@TestContainers的Spring@DataJpaTest_Java_Spring_Testing_Spring Data Jpa_Testcontainers - Fatal编程技术网

Java junit5中带有@TestContainers的Spring@DataJpaTest

Java junit5中带有@TestContainers的Spring@DataJpaTest,java,spring,testing,spring-data-jpa,testcontainers,Java,Spring,Testing,Spring Data Jpa,Testcontainers,这是一个扩展,主要区别在于添加了测试容器 我尽量把事情控制在最低限度 测试非常简单 @DataJpaTest @Testcontainers @ContextConfiguration(classes = { DemoApplicationTests.Config.class }) @AutoConfigureTestDatabase(replace = AutoConfigureTestDatabase.Replace.NONE) class DemoApplicationTe

这是一个扩展,主要区别在于添加了测试容器

我尽量把事情控制在最低限度

测试非常简单

@DataJpaTest
@Testcontainers
@ContextConfiguration(classes = {
        DemoApplicationTests.Config.class
})
@AutoConfigureTestDatabase(replace = AutoConfigureTestDatabase.Replace.NONE)
class DemoApplicationTests {

    @Autowired
    private Artifacts artifacts;

    @Test
    void contextLoads() {
        assertThat(artifacts).isNotNull();
    }

    @Container
    private static final MySQLContainer<?> MYSQL = new MySQLContainer<>("mysql:5.7");

    @Configuration
    static class Config {
        @Bean
        public DataSource dataSource() {

            final DriverManagerDataSource dataSource = new DriverManagerDataSource();
            dataSource.setUrl(MYSQL.getJdbcUrl());
            dataSource.setUsername(MYSQL.getUsername());
            dataSource.setPassword(MYSQL.getPassword());

            await().pollInterval(Duration.ofSeconds(2L))
                    .atMost(Duration.ofMinutes(2L))
                    .until(() -> {
                        try (final Connection c = dataSource.getConnection()) {
                            c.prepareStatement("select 1 from dual");
                            return true;
                        } catch (SQLException e) {
                            return false;
                        }
                    });

            return dataSource;

        }

    }

}
但运行测试时,我会得到以下堆栈跟踪段:


原因:java.lang.IllegalStateException:无法检索@EnableAutoConfiguration基本包
位于org.springframework.boot.autoconfigure.AutoConfigurationPackages.get(AutoConfigurationPackages.java:78)
位于org.springframework.boot.autoconfigure.data.AbstractRepositoryConfigurationSourceSupport.getBasePackages(AbstractRepositoryConfigurationSourceSupport.java:79)
位于org.springframework.boot.autoconfigure.data.AbstractRepositoryConfigurationSourceSupport$AutoConfiguredAnnotationRepositoryConfigurationSource.getBasePackages(AbstractRepositoryConfigurationSourceSupport.java:138)
位于org.springframework.data.repository.config.RepositoryConfigurationSourceSupport.lambda$getCandidates$2(RepositoryConfigurationSourceSupport.java:82)

我找到了两种方法来实现这一点。一种方法是

@ContextConfiguration(classes = {
  DemoApplication.class,
  DemoApplicationTests.Config.class
})
它从
DemoApplication
加载配置。虽然它通常比较干净,但如果您有其他服务,如EnableRedisRepositories和EnableKafka,测试仍然可能失败,因为这些资源可能没有在脚本中配置

或者可以启用
Config
类,以便只执行JPA测试。这是我最终选择的,因为我在从中提取样本的代码上启用了RedisRepositories

    @Configuration
    @EnableTransactionManagement
    @EnableJpaRepositories
    @EntityScan
    static class Config

我找到了两种方法让它工作。一种方法是

@ContextConfiguration(classes = {
  DemoApplication.class,
  DemoApplicationTests.Config.class
})
它从
DemoApplication
加载配置。虽然它通常比较干净,但如果您有其他服务,如EnableRedisRepositories和EnableKafka,测试仍然可能失败,因为这些资源可能没有在脚本中配置

或者可以启用
Config
类,以便只执行JPA测试。这是我最终选择的,因为我在从中提取样本的代码上启用了RedisRepositories

    @Configuration
    @EnableTransactionManagement
    @EnableJpaRepositories
    @EntityScan
    static class Config

尝试将@extendedwith(SpringExtension.class)添加到类DemoApplicationTestsDidn上面。我不适用。但在尝试了一些事情后发现了。尝试在类DemoApplicationTestsDidn上面添加@ExtendWith(SpringExtension.class)对我不起作用。但在尝试了一些东西后发现了。