我尝试使用真实数据库(不是内存数据库)进行单元测试。 这是我的配置文件:
@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的新行。 但是它没有测试方法中具有userId'xxx'的行。并且,当我在测试方法中调试时,当我尝试执行dao.findAll()时,它仅存在一次userId'xxx'记录(请注意,在实际数据库中不存在此记录,实际数据库仅从sql中退出数据),它可以无法访问真实数据库。
如何保存和选择真实数据库中的数据?