测试 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 应用程序

Spring Boot 单元测试示例

使用放心的spring-boot集成测试

从 Spring-Boot 测试中排除 elasticsearchTemplate

测试 Spring Boot 中使用的 HSQLDB 连接

在 Spring Boot MVC 测试中自定义 bean