为testng Spring配置H2数据库

Posted

技术标签:

【中文标题】为testng Spring配置H2数据库【英文标题】:Configure H2 database for testng Spring 【发布时间】:2021-02-11 09:50:51 【问题描述】:

我需要使用嵌入式数据库进行测试,并且我想在 h2-console 中检查结果。我已经为测试配置了属性,我想存储我的测试数据以查看它,但它总是写 Replaceing 'dataSource' DataSource bean with embedded version 并使用另一个 h2 DB,如“jdbc: h2:mem:1f4af8a8-3e14-4755-bcbd-5a59aa31033e"。这个问题我该怎么办? “应用程序-test.properties”:

spring.datasource.driver-class-name=org.h2.Driver
spring.datasource.url=jdbc:h2:file:./subdirectory/demodb
spring.datasource.username=sa
spring.datasource.password=

spring.h2.console.enabled=true

spring.jpa.show-sql=true
spring.jpa.hibernate.ddl-auto=update
spring.jpa.properties.hibernate.format_sql=true

我的测试课:

@DataJpaTest
@ActiveProfiles("test")
class ProductRepositoryTest 
    @Test
    void findByProductName() 
        //...
    

【问题讨论】:

***.com/q/53803780/6572971 可能会有所帮助。 如果你在控制器中使用这个测试方法,结果是一样的? 已经试过了。没有帮助(.properties 不起作用 我只用 Repository 尝试过。没有尝试使用控制器 【参考方案1】:

默认情况下,@DataJpaTest 注释将您的生产数据库替换为嵌入式数据库,将每个测试方法包装在事务中并在测试结束时回滚。

如果您想像在数据库上的“真实”操作一样运行测试,您可以在测试类中添加以下注释:

@AutoConfigureTestDatabase(replace = AutoConfigureTestDatabase.Replace.NONE)
@Transactional(propagation = Propagation.NOT_SUPPORTED)

第一个告诉 Spring 不要使用嵌入式数据库,而第二个告诉 Spring 以非事务方式工作(每个查询都将被持久化)。

【讨论】:

以上是关于为testng Spring配置H2数据库的主要内容,如果未能解决你的问题,请参考以下文章

我创建了一个弹簧启动应用程序

为spring boot配置h2

为 Spring Batch 应用程序初始化 H2 数据库

使用 Spring 和 jdbc DataSourceTransactionManager 填充 H2 数据库

您可以在 Autoconfigured Spring Boot H2 测试数据库上设置兼容模式吗?

4.spriing:Bean的生命周期/工厂方法配置Bean/FactoryBean