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"?>
<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、首先我们创建测试类

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

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、测试用例

执行成功,如果失败的话需要继续调试,直到成功
java单元测试(二)H2数据库篇

注意必须引入@PowerMockIgnore({“javax.management.*”}),不然会报以下这个错
java单元测试(二)H2数据库篇文章来源地址https://www.toymoban.com/news/detail-462032.html

到了这里,关于java单元测试(二)H2数据库篇的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Go 单元测试之Mysql数据库集成测试

    目录 一、 sqlmock介绍 二、安装 三、基本用法 四、一个小案例 五、Gorm 初始化注意点 sqlmock 是一个用于测试数据库交互的 Go 模拟库。它可以模拟 SQL 查询、插入、更新等操作,并且可以验证 SQL 语句的执行情况,非常适合用于单元测试中。 使用 sqlmock 进行 MySQL 数据库集成测试

    2024年04月17日
    浏览(32)
  • 使用MyBatis操作数据库及单元测试

    目录 一.MyBatis介绍 二.MyBatis操作数据库步骤 三.单元测试 idea上生成测试  配置mybatis日志 动态参数 MyBatis是⼀款优秀的持久层框架,⽤于简化JDBC的开发。 JDBC来操作数据库太复杂了,使用MyBatis 是因为它可以帮助我们更⽅便、更快速的操作数据库。 1. 创建springboot工程, 并导入

    2024年02月03日
    浏览(37)
  • 第三单元测试(数据库安全及设计)

    一. 单选题(共46 题,72.5分) 1. (单选题,1.5分)“死锁”是一直___D___。 A. 系统故障 B. 介质故障 C. 磁盘故障 D. 事务故障 2. (单选题,1.5分)事务的原子性是指___D____。 A. 事务一旦提交,对数据库的改变是永久的 B. 一个事务内部的操作及使用的数据对并发的其他事务是隔离的 C. 事务

    2024年02月04日
    浏览(32)
  • SpringBoot整合H2数据库

    H2官网:http://www.h2database.com/ H2是一个Java语言编写的嵌入式数据库,它不受平台的限制,同时H2提供了一个十分方便的web控制台,用于操作和管理数据库内容。H2还提供兼容模式,可以兼容一些主流的数据库,也可以为缓存数据库使用,它具有比较完备的数据库特性,如支cli

    2024年02月16日
    浏览(31)
  • 从零开始:安装H2数据库的步骤解析

    在开发或编写示例时,有时需要用到数据库,如果本机上刚好没有安装,类似有些同学是临时借用的电脑或学校的电脑刚好没有安装时,我们可以使用H2数据库来快速代替,即方便又灵活。 步骤 1:下载H2数据库 访问H2数据库的官方网站(https://www.h2database.com/),并下载最新的

    2024年02月08日
    浏览(30)
  • Springboot集成轻量级内存数据库H2

    最近做一个小项目,需要存储的数据不多,用mysql太重了,用其他的Redis之类的也不太方便,然后就想到了H2,他就是一个jar包,可以和项目一起打包发布,非常适合数据量不多的微小系统,下面大概介绍下H2的基本知识和Springboot的集成 H2是一个用Java开发的嵌入式数据库,它本

    2024年02月07日
    浏览(32)
  • 服务攻防-数据库安全-Influxdb&H2database&CouchDB&ElasticSearch数据库漏洞复现

    目录 一、Influxdb-未授权访问-Jwt 验证不当 1、Infuxdb简介 2、安全问题 3、漏洞复现  二、H2database-未授权访问-配置不当 1、H2database简介 2、安全问题 3、漏洞复现  三、CouchDB-权限绕过配合RCE-漏洞 1、CouchDB简介 2、安全问题 3、漏洞复现  四 、ElasticSearch-文件写入RCE-漏洞 1、Ela

    2024年02月16日
    浏览(30)
  • 数据库安全-H2 database&Elasticsearch&CouchDB&Influxdb漏洞复现

    参考:influxdb CVE-2019-20933 靶场环境:vulhub 打开靶场进入环境: 访问: 端口扫描: 默认端口: 8086:用于客户端和服务端交互的HTTP API 8088 :用于提供备份和恢复的RPC服务 influxdb 是一款著名的时序数据库,其使用 jwt 作为鉴权方式。在用户开启了认证, 但未设置参数 shared-s

    2024年02月06日
    浏览(25)
  • H2数据库配置及相关使用方式一站式介绍(极为详细并整理官方文档)

    注意:可以直接移步至【2. H2数据库实战】目录下进行对H2数据库的快速使用 1.1 H2数据库介绍 官方文档地址: http://www.h2database.com/html/main.html H2的开发始于2004年5月, 但它在2005年12月14日首次发表。 H2的原作者Thomas Mueller也是Hypersonic SQL的原始开发者。 2001年,他加入PointBase公司

    2024年02月13日
    浏览(27)
  • Sangfor华东天勇战队:h2数据库console命令执行( CVE-2021-42392 漏洞)

    1.1.100 = H2 Console = 2.0.204 此处复现版本1.4.197 启动项目如下 在Driver Class中输入javax.naming.InitialContext 在JDBCURL中输入jndi注入恶意链接 生成链接命令: 因为项目环境是jdk1.7,因此我们用1.7的jndi,其他版本均不生效 通过漏洞公布,可以看到是在org.h2.util.JdbcUtils.getConnection的javax.na

    2024年02月11日
    浏览(25)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包