Я пытаюсь написать несколько интеграционных тестов (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, не испортив контекст приложения?