测试 Spring Boot 中使用的 HSQLDB 连接
Posted
技术标签:
【中文标题】测试 Spring Boot 中使用的 HSQLDB 连接【英文标题】:Test HSQLDB connection used in SpringBoot 【发布时间】:2018-04-26 15:51:06 【问题描述】:我能以某种方式测试我的数据库(使用 HSQL)是否连接正确吗? 有没有可能模拟这种数据库,只是测试它,而不是完全连接到它?
application.properties
spring.datasource.driver-class-name=org.hsqldb.jdbcDriver
spring.datasource.url = jdbc:hsqldb:file:testdb.script
spring.datasource.username=sa
spring.jpa.hibernate.ddl-auto=create
spring.jpa.show-sql=true
【问题讨论】:
用jdbc:hsqldb:mem:test
(全部在内存中)配置另一个HSQLDB并连接到这个而不是主数据库。
【参考方案1】:
为什么不使用 JUnit?下面的示例代码和步骤 - 可能存在语法错误。
将 H2 内存数据库配置为测试的数据源:示例文件
spring.datasource.driver-class-name=org.h2.Driver
spring.datasource.url=jdbc:h2:mem:db;DB_CLOSE_DELAY=-1
spring.datasource.username=sa
spring.datasource.password=sa
Spring Boot 将使用这些属性自动配置 DataSource bean。
您可以使用 Spring JPA 定义测试实体和存储库(如果需要,在 maven 中包含依赖项)
@Entity
public class TestEntity
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
private String value;
// add constructors, getters, setters etc
创建仓库
public interface TestEntityRepository
extends JpaRepository<GenericEntity, Long>
现在写一个测试类,看看连接是否正常?
@RunWith(SpringRunner.class)
@SpringBootTest(classes = Application.class)
public class SpringBootJPAIntegrationTest
@Autowired
private TestEntityRepository testEntityRepository;
@Test
public void givenTestEntityRepository_whenSaveAndRetreiveEntity_thenOK()
TestEntity TestEntity= testEntityRepository
.save(new TestEntity ("test"));
TestEntity foundEntity = genericEntityRepository
.findOne(genericEntity.getId());
assertNotNull(testEntity);
assertEquals(testEntity.getValue(), foundEntity.getValue());
【讨论】:
没关系,但是如果我已经有了 hsqldb,为什么要使用 H2,我猜这很相似。你的回答没问题,但我的任务是不更改数据库中的任何内容,甚至不连接到它,但测试这个数据库。我想过用mockito来模拟这个连接,有什么解决办法吗? 您可以保留我不建议更改的 HSQL。我有关于如何连接到内存数据库的示例代码。我的建议是如何使用 JUnit 和 Spring boot 测试数据库连接?您可以模拟,但它会测试实际连接吗? 是的,你说得对,当模拟连接时,测试它是没有意义的,谢谢你的时间+ @cwiq 那么你能接受并投票赞成答案吗?【参考方案2】:你可以尝试使用:
spring.datasource.testOnBorrow=true
spring.datasource.validationQuery=SELECT 1
或
spring.datasource.tomcat.testOnBorrow=true
spring.datasource.tomcat.validationQuery=SELECT 1
【讨论】:
以上是关于测试 Spring Boot 中使用的 HSQLDB 连接的主要内容,如果未能解决你的问题,请参考以下文章
在黄瓜测试模块中使用主应用程序数据源 - Spring-boot 应用程序