持久性顶部

通过引用开始使用Spring Data JPA学习Spring Data JPA课程:

1188金宝搏亚洲

1.概述

春天JdbcTemplate是一个强大的工具,让开发人员专注于编写SQL查询和提取结果。它连接到后端数据库并直接执行SQL查询。

因此,我们可以使用集成测试来确保我们可以正确地从数据库中提取数据。此外,我们可以编写单元测试以检查相关功能的正确性。

在本教程中,我们将展示如何测试JdbcTemplate代码。

2。JdbcTemplate和运行查询

首先,让我们从数据访问对象(DAO)类开始JdbcTemplate

公共类员工{私有jdbctemplate jdbctemplate;public void setDataSource(DataSource DataSource){jdbctemplate = new jdbctemplate(dataSource);public int getcountofemocneeees(){return jdbctemplate.queryforobject(“从员工选择count(*)”,Integer.class);}}

我们依赖注射一个数据源对象进入雇佣寿服类。然后,我们创建JdbcTemplate对象中的。同时,我们使用JdbcTemplate在一个示例方法中getcountofemployees()。

有两种方法可以使用使用的单元测试方法JdbcTemplate

我们可以使用内存内存数据库等H2数据库作为测试的数据源。但是,在真实的应用程序中,SQL查询可能具有复杂的关系,并且我们需要创建复杂的设置脚本来测试SQL语句。

或者,我们也可以嘲笑JdbcTemplate对象测试方法功能。

3.用H2数据库进行单元测试

我们可以创建连接到H2数据库并将其注入的数据源雇佣寿服班级:

@Test公共void wheninjectinmemorydatasource_thenreturncorrecemployeecount(){datasource datasource = new embeddeddatabasebasebasebuilder()。settype(embeddeddatabaseType.h2).addscript(“classpath:jdbc / schema.sql”).addscript(“classpath:jdbc / test-data.sql”)。建造();聘请雇佣雇佣概率=新员工();employEdao.setDataSource(DataSource);assertequal (4, employeeDAO.getCountOfEmployees ());}

在此测试中,我们首先在H2数据库上构建数据源。在施工期间,我们执行schema.sql.创建员工桌子:

创建表员工(ID INT NOT NULL主键,FIRST_NAME varchar(255),last_name varchar(255),地址varchar(255));

同时,我们运行test-data.sql.要将测试数据添加到表中:

插入员工价值观(1,'james','gosling','加拿大');插入员工价值观(2,'Donald','Knuth','美国');插入员工价值观(3,'Linus','Torvalds','Finland');插入员工价值观(4,'Dennis','Ritchie','美国');

然后,我们可以将此数据源注入其中雇佣寿服类并测试getcountofemocnee在内存中的方法H2数据库。

4。单位测试与模拟对象

我们可以嘲笑JdbcTemplate对象使我们不需要在数据库上运行SQL语句:

public class EmployeeDAOUnitTest {@Mock JdbcTemplate JdbcTemplate;@Test public void whenMockJdbcTemplate_thenReturnCorrectEmployeeCount() {EmployeeDAO EmployeeDAO = new EmployeeDAO();ReflectionTestUtils。jdbcTemplate setField (employeeDAO“jdbcTemplate”);Mockito.when (jdbcTemplate。queryForObject("SELECT COUNT(*) FROM EMPLOYEE", Integer.class)) .then (4);assertequal (4, employeeDAO.getCountOfEmployees ());}}

在这个单位测试中,我们首先宣布了一个模拟JdbcTemplate对象与之@嘲笑注解。然后我们注射了它雇佣寿服物体使用反思学报此外,我们使用5控件的返回结果JdbcTemplate查询这允许我们测试功能getcountofemocnee方法而不连接到数据库。

当我们嘲笑时,我们在SQL语句字符串上使用完全匹配JdbcTemplate查询在现实世界应用中,我们可以创建复杂的SQL字符串,并且很难完成完全匹配。因此,我们也可以使用Anystring()绕过字符串检查的方法:

Mockito.when (jdbcTemplate.queryForObject (Mockito.anyString (), Mockito.eq (Integer.class))) .thenReturn (3);assertequal (3, employeeDAO.getCountOfEmployees ());

5.弹簧引导@JdbcTest

最后,如果我们使用春靴,我们可以使用批注我们使用H2数据库和一个引导测试JdbcTemplate豆角,扁豆:@jdbctest.

让我们使用此注释创建一个测试类:

@jdbctest @sql({schema.sql“,”test-data.sql“})类elemplyEdaegrationTest {@autowired私有jdbctemplate jdbctemplate;@test void whinjinectinmemorydatasource_thenreturncorrecemployeecount(){雇佣式雇佣ev =新员工申请();employEdao.setjdbctemplate(Jdbctemplate);assertequal (4, employeeDAO.getCountOfEmployees ());}}

我们也可以注意到存在@sql.允许我们的注释指定在测试前运行的SQL文件

六,结论

在本教程中,我们显示了多种方法来进行单元测试JdbcTemplate。

与往常一样,本文的源代码是可用的在GitHub

持久性底部
通过引用开始使用Spring Data JPA学习Spring Data JPA课程:1188金宝搏亚洲
对这篇文章的评论关闭!