Загрузка json в базу данных во время интеграционных тестов - PullRequest
0 голосов
/ 22 января 2020

Я пытаюсь написать несколько интеграционных тестов (Junit5), где мне нужно будет извлечь некоторые данные из хранилища. Я хотел бы предварительно заполнить базу данных некоторыми данными json (я хочу избегать sql) перед началом теста.

После некоторых исследований мне удается создать тестовую базу данных. 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, не испортив контекст приложения?

Ответы [ 2 ]

1 голос
/ 23 января 2020

Вместо использования @ContextConfiguration, который стирает все ваши конфигурации по умолчанию и заменяет их указанными классами, попробуйте использовать @Import над вашим классом. Это объединит ваш конфиг.

1 голос
/ 22 января 2020

Вы должны проверить аннотацию @ComponentScan ("base-package-where-scan-start '") и поместить ее в свой TestConfiguration класс

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...