我的应用程序使用Spring-Boot 1.4.1.RELEASE,我的数据源配置如下;
spring:
datasource:
url: ***
username: ***
password: ***
driver-class-name: oracle.jdbc.driver.OracleDriver
initial-size: 1
max-active: 100
max-idle: 30
min-idle: 1
max-wait: 0
pool-prepared-statements: true
max-open-prepared-statements: 3
问题是我的集成测试的最后一种情况,如果它包含@Sql
设置逻辑,则无法提交最后一次设置SQL。由于案例的重新排序,很少发生这种麻烦,而且只有少数案例需要设置逻辑来准备DB。没有配置,只有OracleDB的配置,而且在ConfigClass
。
@SpringBootTest(classes = ConfigClass.class)
public class EtcTest {
@After
public void teardown() {
// teardwon X, Y, & Z
}
@Test
@Sql("setupX.sql")
@Sql("setupY.sql")
@Sql("setupZ.sql")
public void get_fromDb() {
List<Etc> list = buildExpectedList();
Obj expected = buildExpected();
Obj actual = getCallToAPI();
assertThat(rs.getX()).isEqualTo(expected.getX());
assertThat(rs.getY()).isEqualTo(expected.getY());
assertThat(rs.getZ()).containsAll(list);
}
}
麻烦,例如在上述情况下,如果它是最后一个整合案例,
它无法提交@Sql
注释中的最后一个SQL,即SetupZ.sql
,但数据并未完全丢失,它会插入主键,有时会插入columnA
或{{1 ,就好像这里真的出了问题。
某些配置的存在与否会导致这种情况吗?如果不是这样的原因?
答案 0 :(得分:2)
您可以使用@Transactional
测试。这允许您运行测试检查结果并使BD回滚到预测试状态。
答案 1 :(得分:1)
您好,对于测试类而不是实际数据库,您可以使用内存数据库,如DB2,derby和h2。它为您的麻烦提供了解决方案。
对于Code示例,您可以在下面找到URL Spring data jpa repository In-memory test case
答案 2 :(得分:1)
您可以尝试使用JPA进行持久化。可以使用以下设置:
spring.jpa.show-sql=true
然后你可以看到出了什么问题。
答案 3 :(得分:0)
这是由于JUnit和Spring / Hibernate中的某些库冲突。更新到最新的Spring&Junit版本并更新到Java8之后,问题就消失了。