【问题标题】:Loading json into the database during integration tests在集成测试期间将 json 加载到数据库中
【发布时间】:2020-01-22 19:42:03
【问题描述】:

我正在尝试编写一些集成测试(Junit5),我需要从存储库中获取一些数据。我想在测试开始之前用一些 json 数据(我想避免使用 sql)预先填充数据库。

经过一番研究,我设法在我的资源文件夹中创建了 test-database.json 文件:

[
  {
    "_class": "com.marcellorvalle.scheduler.entity.Professional",
    "id": 1,
    "name": "James Holden"
  },
  {
    "_class": "com.marcellorvalle.scheduler.entity.Professional",
    "id": 2,
    "name": "Gerald of Rivia"
  },
  {
    "_class": "com.marcellorvalle.scheduler.entity.Professional",
    "id": 3,
    "name": "Christjen Avassalara"
  }
]

还有配置文件:

@Configuration
public class TestConfiguration {
    @Bean
    public Jackson2RepositoryPopulatorFactoryBean getRepositoryPopulator() {
        final Jackson2RepositoryPopulatorFactoryBean factory = new Jackson2RepositoryPopulatorFactoryBean();
        factory.setResources(new Resource[]{new ClassPathResource("test-database.json")});

        return factory;
    }

}

我有一个虚拟测试只是为了检查一切是否正常:

@DataJpaTest
@ExtendWith(SpringExtension.class)
public class IntegrationTest {
    final private ProfessionalRepository repository;

    @Autowired
    public IntegrationTest(ProfessionalRepository professionalRepository) {
        repository = professionalRepository;
    }

    @Test
    public void testFindAll() {
        final List<Professional> result = repository.findAll();
        Assertions.assertEquals(3, result.size());    
    }
}

当我运行测试时,它会失败并且没有结果。接下来我在 TestClass 中添加了以下内容:

@ContextConfiguration(classes=TestConfiguration.class)

现在 TestConfiguration 已加载,但无法解析 ProfessionalRepository:

org.junit.jupiter.api.extension.ParameterResolutionException: Failed to resolve parameter [com.marcellorvalle.scheduler.repository.ProfessionalRepository professionalRepository] (...) Failed to load ApplicationContext

有什么方法可以在不弄乱应用程序上下文的情况下读取 TestConfiguration 吗?

【问题讨论】:

    标签: spring-boot spring-data-jpa integration-testing junit5


    【解决方案1】:

    不要使用@ContextConfiguration 来擦除所有默认配置并用指定的类替换它们,而是尝试在你的类上使用@Import。这将聚合您的配置。

    【讨论】:

      【解决方案2】:

      您应该检查 @ComponentScan("base-package-where-scan-starts'") 注释并将其放在您的 TestConfiguration 类中

      https://www.javarticles.com/2016/01/spring-componentscan-annotation-example.html

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-11-12
        • 2013-03-18
        • 1970-01-01
        • 2010-09-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多