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"?>
<beans xmlns="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-autoproxy proxy-target-class="true"/>

    <tx:annotation-driven/>
    
    <!-- 初始化h2数据库 -->
    <jdbc:embedded-database id="dataSource" generate-name="true" type="H2">
        <jdbc:script location="classpath:init/DDL_init.sql"/>
        <jdbc:script location="classpath:init/DML_init.sql"/>
    </jdbc:embedded-database>

    <!-- 创建SqlSessionFactory -->
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="dataSource" ref="dataSource"></property>
        <property name="mapperLocations">
            <list>
                <value>classpath*:mapper/*.xml</value>
            </list>
        </property>
    </bean>
    <!-- 扫描Mapper文件并生成dao对象 -->
    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <property name="basePackage" value="cn.com.jc.mapper"></property>
        <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"></property>
    </bean>
    <!-- 配置事务管理器 -->
    <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource"></property>
    </bean>

    <bean class="cn.com.jc.service.impl.UserServiceImpl"/>
</beans>

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

DDL_init.sql

CREATE TABLE IF NOT EXISTS`user`  (
 `id` varchar(255)  NOT NULL,
 `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)  NOT NULL COMMENT '用户编号',
 `user_status` varchar(255)   COMMENT '用户状态(状态为0显示可用,状态为1显示停用)',
 `email` varchar(255)   COMMENT '邮箱',
 `profile` varchar(255)   COMMENT '登录密码',
 PRIMARY KEY (`id`) 
) ENGINE = InnoDB ;

DML_init.sql

INSERT INTO `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', 'test@qq.com', '我是test1');

三、编写单元测试

3.1、首先我们创建测试类

在这里插入图片描述

3.2、编写测试用例

@RunWith(PowerMockRunner.class)
@PowerMockRunnerDelegate(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:application-test.xml")
@EnableTransactionManagement
@PowerMockIgnore({"javax.management.*", "javax.script.*"})
public class UserServiceImplTest {

    @Autowired
    private UserService userService;

    @Test
    public void selectUserById() {

        User user = userService.selectUserById("27bd35f040d74585951974134ec86153");
        Assert.assertEquals("27bd35f040d74585951974134ec86153", user.getId());
    }

    @Test
    public void test_update() {
        User user = new User();
        user.setId("27bd35f040d74585951974134ec86153");
        user.setAddress("test01");
        user.setProfile("我是test1");
        user.setEmail("test@qq.com");
        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.*”}),不然会报以下这个错
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值