Я пытаюсь сделать модульный тест с реальной базой данных (имеется в виду не база данных в памяти). это мой файл конфигурации:
@TestConfiguration
@EnableJpaAuditing
public class TestConfig {
@Bean
@Primary
public DataSource getDataSource() {
HikariDataSource hikariDataSource = new HikariDataSource();
hikariDataSource.setJdbcUrl("jdbc:mysql://localhost:3306/faptv");
hikariDataSource.setDriverClassName("com.mysql.cj.jdbc.Driver");
hikariDataSource.setUsername("mansion");
hikariDataSource.setPassword("mansion");
return hikariDataSource;
}
}
Это мой образец теста:
@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
@AutoConfigureTestDatabase(replace = AutoConfigureTestDatabase.Replace.NONE)
@ContextConfiguration(classes = {TestConfig.class})
@DirtiesContext
@Transactional
public class BaseEntityTest {
@Autowired
private TBL120Dao dao;
@Test
@Sql("classpath:/sql/abc.sql")
public void test() {
TBL120Dto dto = new TBL120Dto();
dto.setUserId("xxx");
dto.setUsername("ccsc");
dto.setPasswordHash("passss");
dao.save(dto);
assertThat(dao.findByUserId("kkk").isPresent()).isTrue();
}
}
Это мой /sql/abc.sql
insert into tbl120(user_id, password_hash, username) value ("kkk", "ssss", "Ssss");
Когда тест завершен: я вижу в своей реальной базе данных: в ней есть новая строка из sql. Но у него нет строки с идентификатором пользователя «xxx» из тестового метода. И, когда я отлаживаю внутренний тестовый метод, он существует только один раз, когда я пытаюсь выполнить dao.findAll() (обратите внимание, что в реальной базе данных этого не существует, реальная база данных только выходит из данных из sql), она может не получить доступ к реальной базе данных.
как я могу сохранить и выбрать данные из реальной базы данных?