zoukankan      html  css  js  c++  java
  • 利用H2的自定义函数更好的支持测试

    在写DAO层的单元测试时,用mock的写法意义不大,因为DAO层的测试更多的关注是Java对象的传递和生成SQL的正确性,所以需要链接真实的数据库。

    但是对于单元测试,真实的数据库是很重的,还要依赖于数据库本身的初始化和数据情况。H2作为一个基于Java开发的嵌入式数据库,支持在内存运行,也支持文件模式,非常适合用在单元测试。因为Spring Boot等框架对于这一块的支持很全面了,特别是Spring Boot默认的JDBC测试如果没有配置,会自动启动一个H2的内存数据库。

    H2虽然支持很多模式,可以尽可能的模拟不同的数据库,但是还是有一些支持是不完整的,一些数据库特有的方法H2是不支持的,比如MySQL的UNIX_TIMESTAMP。特别是业务上基本都有创建时间和更新时间这两列,unix_timestamp函数大量使用。

    这里可以使用H2的一个特性–用户自定义函数,支持两种使用方式

    1. Java方法预编译
    2. Java源代码直接使用

    这里来看看如何让H2支持unix_timestamp方法:
    首先新建一个新Java类

    然后使用SQL创建一个别名,并将别名链接到我们的Java类的对应方法中

    然后在初始化Datasource的时候执行该SQL语句就行了

    参考

    http://www.h2database.com/html/features.html#user_defined_functions
    https://hyrepo.com/tech/h2-unit-test/

  • 相关阅读:
    Django ORM操作
    两张表是一对一的关系为什么不直接都放在一张表里面?
    TCP、UDP 详解
    如何使用Xshell连接虚拟机
    selenium中常见的无法定位元素问题
    python中生产者消费者模式
    Selenium 点击后跳转至新窗口无法定位元素问题(element not interactable)
    linux 网络管理
    Linux文件权限
    linux 用户管理命令
  • 原文地址:https://www.cnblogs.com/exmyth/p/12522624.html
Copyright © 2011-2022 走看看