0


java单元测试(二)H2数据库篇

java单元测试(二)H2数据库篇

一、什么是H2?

H2 数据库是一个用 Java 开发的嵌入式(内存级别)数据库,它本身只是一个类库,也就是只有一个 jar 文件,可以直接嵌入到项目中。 H2数据库又被称为内存数据库,因为它支持在内存中创建数据库。

二、Springboot项目集成H2

为什么测试数据库CRUD
对于Spring项目,特别是测试Service层或者dao层的代码时。需要验证访问数据库的逻辑是否正确。

2.1、引入H2依赖

<dependency><groupId>com.h2database</groupId><artifactId>h2</artifactId><version>1.4.193</version><scope>runtime</scope></dependency>

2.2、初始化spring配置文件application.test.xml

<?xml version="1.0" encoding="UTF-8"?><beansxmlns="http://www.springframework.org/schema/beans"xmlns:context="http://www.springframework.org/schema/context"xmlns:aop="http://www.springframework.org/schema/aop"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:tx="http://www.springframework.org/schema/tx"xmlns:jdbc="http://www.springframework.org/schema/jdbc"xsi:schemaLocation="http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
        http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context-4.0.xsd
        http://www.springframework.org/schema/aop
        http://www.springframework.org/schema/aop/spring-aop-4.0.xsd
        http://www.springframework.org/schema/tx
        http://www.springframework.org/schema/tx/spring-tx-4.0.xsd
        http://www.springframework.org/schema/jdbc
        http://www.springframework.org/schema/jdbc/spring-jdbc-4.0.xsd"><context:annotation-config/><aop:aspectj-autoproxyproxy-target-class="true"/><tx:annotation-driven/><!-- 初始化h2数据库 --><jdbc:embedded-databaseid="dataSource"generate-name="true"type="H2"><jdbc:scriptlocation="classpath:init/DDL_init.sql"/><jdbc:scriptlocation="classpath:init/DML_init.sql"/></jdbc:embedded-database><!-- 创建SqlSessionFactory --><beanid="sqlSessionFactory"class="org.mybatis.spring.SqlSessionFactoryBean"><propertyname="dataSource"ref="dataSource"></property><propertyname="mapperLocations"><list><value>classpath*:mapper/*.xml</value></list></property></bean><!-- 扫描Mapper文件并生成dao对象 --><beanclass="org.mybatis.spring.mapper.MapperScannerConfigurer"><propertyname="basePackage"value="cn.com.jc.mapper"></property><propertyname="sqlSessionFactoryBeanName"value="sqlSessionFactory"></property></bean><!-- 配置事务管理器 --><beanid="transactionManager"class="org.springframework.jdbc.datasource.DataSourceTransactionManager"><propertyname="dataSource"ref="dataSource"></property></bean><beanclass="cn.com.jc.service.impl.UserServiceImpl"/></beans>

2.3、初始化H2数据库DDL/DML语句

DDL_init.sql

CREATETABLEIFNOTEXISTS`user`(`id`varchar(255)NOTNULL,`address`varchar(255)COMMENT'地址',`created_by`varchar(255),`created_time`datetime(0),`deleted`varchar(255),`last_modified`varchar(255),`last_modified_time`datetime(0),`login_name`varchar(255)COMMENT'登录名',`login_password`varchar(255)COMMENT'登录密码',`name`varchar(255)COMMENT'用户名',`phone`varchar(255)COMMENT'手机',`remark`varchar(255)COMMENT'备注',`user_code`varchar(255)NOTNULLCOMMENT'用户编号',`user_status`varchar(255)COMMENT'用户状态(状态为0显示可用,状态为1显示停用)',`email`varchar(255)COMMENT'邮箱',`profile`varchar(255)COMMENT'登录密码',PRIMARYKEY(`id`))ENGINE=InnoDB;

DML_init.sql

INSERTINTO`user`VALUES('27bd35f040d74585951974134ec86153','test01','lxf666','2021-02-28 12:45:54','0','lxf666','2021-02-28 13:07:54','test01','$2a$10$QLVCFhfesLhVKezrDd5RsuHqWknndx6XPHnGdXzwjxuoGZWQf2kWK','test','test',NULL,'0030','0','[email protected]','我是test1');

三、编写单元测试

3.1、首先我们创建测试类

在这里插入图片描述

3.2、编写测试用例

@RunWith(PowerMockRunner.class)@PowerMockRunnerDelegate(SpringJUnit4ClassRunner.class)@ContextConfiguration("classpath:application-test.xml")@EnableTransactionManagement@PowerMockIgnore({"javax.management.*","javax.script.*"})publicclassUserServiceImplTest{@AutowiredprivateUserService userService;@TestpublicvoidselectUserById(){User user = userService.selectUserById("27bd35f040d74585951974134ec86153");Assert.assertEquals("27bd35f040d74585951974134ec86153", user.getId());}@Testpublicvoidtest_update(){User user =newUser();
        user.setId("27bd35f040d74585951974134ec86153");
        user.setAddress("test01");
        user.setProfile("我是test1");
        user.setEmail("[email protected]");
        user.setPhone("188888888");
        user.setName("test");
        userService.update(user);User newUser = userService.selectUserById("27bd35f040d74585951974134ec86153");Assert.assertEquals("setPhone", newUser.getPhone());}}

引入@PowerMockIgnore({“javax.script.*”})为了执行H2初始化脚本,不可缺少

3.3、测试用例

执行成功,如果失败的话需要继续调试,直到成功
在这里插入图片描述

注意必须引入@PowerMockIgnore({“javax.management.*”}),不然会报以下这个错
在这里插入图片描述


本文转载自: https://blog.csdn.net/qq_45887180/article/details/129464713
版权归原作者 依赖,已成瘾 所有, 如有侵权,请联系我们删除。

“java单元测试(二)H2数据库篇”的评论:

还没有评论