gpt4 book ai didi

java - 在运行 Spring boot REST Controller 端到端测试之前初始化 db

转载 作者:行者123 更新时间:2023-11-30 06:47:38 27 4
gpt4 key购买 nike

我将 JPA/Hibernate 用于我的 Spring Boot 应用程序。我正在为 REST Controller 编写 ftest。

我想更改数据库状态(插入一些行等)并测试 REST Controller 以查看它是否按预期返回/工作。

使用Service层来初始化数据库听起来不太对(最后我们要测试的是端到端的测试!)。

在 Spring Boot 应用程序测试中初始化数据库的最佳方法是什么?

注意我听说过 DBUnit但它使用 xml,我宁愿使用 java 代码。

最佳答案

我知道这里有三个选项

<强>1。 Hibernate 中的 import.sql

就像将 import.sql 添加到 src/test/resources 文件夹一样简单。在 import.sql 中你可以输入你的 sql 来插入你想要的数据。您还必须将 hibernate-ddl-auto 设置为在 application.properties 中创建。

例如。应用程序.properties

spring.jpa.hibernate.ddl-auto=create
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.PostgreSQLDialect
spring.datasource.url=jdbc:postgresql://localhost/asgard
spring.datasource.username=thor
spring.datasource.password=mjolnir

例如导入.sql

insert into 
account (id, createddate, modifieddate, password , username, disabled)
values (-1, now(),null, 'password','admin',false);

<强>2。 Spring 测试数据库单元

Spring Test DB Unit是专门针对 Spring 的 DB Unit。这基本上允许您在方法和类级别测试后添加数据和删除数据,这非常有用。检查链接以获取更多详细信息。 xml 实际上可以更轻松地管理要插入的数据。您也可以通过编程方式插入数据,但它更复杂,网站上应该有说明。


@Test
@DatabaseSetup(value = "insert.xml")
@DatabaseSetup(connection="customerDataSource", value="insert-custs.xml")
public void testInsert() throws Exception {
// Inserts "insert.xml" into dataSource and "insert-custs.xml" into customerDataSource
// ...
}

例如插入.xml

<?xml version="1.0" encoding="UTF-8"?>
<dataset>
<Person id="0" title="Mr" firstName="Phillip" lastName="Webb"/>
</dataset>

表名是人以及 id、title、firstName 和 lastName 作为字段。

<强>3。使用@Before 注解

在Test类中使用@Before注解设置数据库。

通用测试类

@RunWith(SpringRunner.class)
@SpringBootTest
public class GenericTest {

public EmployeeRepository employeeRepository;

@Before
public void setUp() {
employeeRepository.save(createRandomEmployeeObject());
}

@Test
public void insertSuccess(){
List<Employee> employee = employeeRepository.findAll();

//Logic to get employee from rest API

//Assert if data from rest API matches one in db

}
}

关于java - 在运行 Spring boot REST Controller 端到端测试之前初始化 db,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45727915/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com