美文网首页
Unitils H2 测试基础设施

Unitils H2 测试基础设施

作者: 杭州_mina | 来源:发表于2017-12-05 18:46 被阅读0次

1. 为什么使用Unitils H2

  • 1.1 DAO(REPOSITORY) 层的业务需要做测试,可以直接测试出SQL存在的问题,返回的结果是否是自己想要的。
  • 1.2 使用H2 避免了测试需要数据库的情况,也就是间接性的做到了数据的隔离,使得测试程序在跑的时候不受外部因素的影响,从而影响了怎么测试结果。当然H2和各个数据库的兼容需要大家好好考虑,但是大部分的情况都是兼容

2. 需要引入的jar

  • 2.1 Unitils H2 maven配置 我使用spring boot框架来作为测试
    版本 <unitils.version>3.4.2</unitils.version>
<!-- test -->
        <dependency>
            <groupId>com.h2database</groupId>
            <artifactId>h2</artifactId>
        </dependency>
        <dependency>
            <groupId>org.unitils</groupId>
            <artifactId>unitils-core</artifactId>
            <version>${unitils.version}</version>
        </dependency>
        <dependency>
            <groupId>org.unitils</groupId>
            <artifactId>unitils-io</artifactId>
            <version>${unitils.version}</version>
        </dependency>
        <dependency>
            <groupId>org.unitils</groupId>
            <artifactId>unitils-spring</artifactId>
            <version>${unitils.version}</version>
        </dependency>
        <dependency>
            <groupId>org.unitils</groupId>
            <artifactId>unitils-dbunit</artifactId>
            <version>${unitils.version}</version>
        </dependency>
        <dependency>
            <groupId>org.unitils</groupId>
            <artifactId>unitils-dbmaintainer</artifactId>
            <version>${unitils.version}</version>
            <exclusions>
                <exclusion>
                    <groupId>org.hibernate</groupId>
                    <artifactId>hibernate</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>org.slf4j</groupId>
                    <artifactId>slf4j-nop</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>org.assertj</groupId>
            <artifactId>assertj-core</artifactId>
            <version>${assertj.version}</version>
            <scope>test</scope>
        </dependency>
  • 2.2 unitils-local.properties 配置
database.driverClassName=org.h2.Driver
database.url=jdbc:h2:mem:test
database.userName=123
database.password=123
DatabaseModule.Transactional.value.default=disabled
database.dialect=h2
database.schemaNames=public
updateDataBaseSchema.enabled=true
dbMaintainer.fromScratch.enabled=true
dbMaintainer.dbVersionSource.autoCreateVersionTable=true
dbMaintainer.autoCreateExecutedScriptsTable=true
dbMaintainer.keepRetryingAfterError.enabled=true
dbMaintainer.cleanDb.enabled=true
##建表语句
dbMaintainer.script.locations=src/test/resources/database/schema/schema.ddl
dbMaintainer.generateDataSetStructure.enabled=true
dataSetStructureGenerator.xsd.dirName=src/test/resources/database/xsd
  • 2.3 application.properties 配置
spring.datasource.url=jdbc:h2:mem:test
spring.datasource.username=123
spring.datasource.password=123
spring.datasource.driver-class-name=org.h2.Driver
  • 2.4 UnitilsH2TestApplication 代码
@PropertySource("classpath:/application.properties")
@MapperScan("com.example.unitilsh2test.domain.infrastructure.model")
@ComponentScan("com.example.unitilsh2test.domain.infrastructure")
@SpringBootApplication
public class UnitilsH2TestApplication {
}
  • 2.5 UnitilsH2TestApplicationTests 代码 这个抽象类很重要 以后所有的test 类只要继承 这个类 就可以运行 Unitils了
@SpringApplicationContext({"/appContext-unit.xml"})
public abstract class UnitilsH2TestApplicationTests extends UnitilsJUnit4 {
}

  • 2.6 appContext-unit.xml 配置
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:aop="http://www.springframework.org/schema/aop"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:jee="http://www.springframework.org/schema/jee"
       xmlns:lang="http://www.springframework.org/schema/lang"
       xmlns:tx="http://www.springframework.org/schema/tx"
       xmlns:util="http://www.springframework.org/schema/util"
       xmlns:p="http://www.springframework.org/schema/p"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
           http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd
           http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
           http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee.xsd
           http://www.springframework.org/schema/lang http://www.springframework.org/schema/lang/spring-lang.xsd
           http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd
           http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd">
    <context:annotation-config/>

    <bean name="unitilsH2TestApplication" class="com.example.unitilsh2test.common.UnitilsH2TestApplication"/>
</beans>

以上所有的配置和代码 已经搭建好了 Unitils H2 接下去只要测试自己想测试的DAO(REPOSITORY) 就可以了

3. XXXRepository 测试

  • 3.1 UserRepository 测试开发 教大家一个快速的构建测试方法

    我这里的快捷键是 command + T、快捷键修改 大家可以去看idea设置项 image.png
    快速构建测试类
    image.png
    image.png

选择你要测试方法 就可以了

  • 3.2 UserRepositoryImplTest 代码
@DataSet(value = "/database/dataset/user.xml")
public class UserRepositoryImplTest extends UnitilsH2TestApplicationTests {

    @SpringBeanByType
    private UserRepository userRepository;

    @Test
    public void findByName() throws Exception {
        User user = userRepository.findByName("1");
        ##断言user中的变量email 的值为1 
        Assertions.assertThat(user).hasFieldOrPropertyWithValue("email", "1");
    }

}
  • 3.2 user.xml 代码 意思就是在user表中 生成一条记录
<?xml version='1.0' encoding='utf-8'?>
<dataset xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:noNamespaceSchemaLocation="../xsd/dataset.xsd">

    <!-- app_layout -->
    <user username="1"
          email="1"
          password="1"
        
    />

</dataset>

以上就是全部内存 直接运行就好了
附上 githua 项目地址 https://github.com/chenshengyu/unitils-h2-test.git

相关文章

  • Unitils H2 测试基础设施

    1. 为什么使用Unitils H2 1.1 DAO(REPOSITORY) 层的业务需要做测试,可以直接测试出S...

  • Unitils-使用实践

    简介 Unitils这个Java开源类包的目的是让单元测试变得更加容易和可维护。Unitils构建在DBUnit与...

  • 单元测试概述&TestNG(一)

    主要内容:● 概述单元测试相关概念及意义● TestNG、Mockito、Unitils测试框架简介● 使用Tes...

  • Service层Mock测试 2018-05-15

    (关键词:逻辑层(service)和数据访问层(Dao) Unitils、Spring测试框架、UnitilsJU...

  • 这是标题

    H1 H2 H3 测试 黑体 斜体 上映蝇

  • helloworld

    这是一篇测试。 这是一篇测试这是一篇测试。。 这是测试 这是测试3 这是h1 这是h2 这是h3

  • H2 全文检索功能

    在前面的文章中,我们介绍了 H2 的一些特性以及 为什么H2 适合应用在测试环境中。H2 不但可以作为嵌入式数据库...

  • SpringBoot集成MyBatisCommonMapper

    1. pom配置 引入spring boot, mybatis-spring, tk.mybatis, h2测试数...

  • 2018-07-20

    h1 h2 h3 h4 测试一下效果

  • 标题

    正文 粗斜 中线 引用 H1 H2 H3 H4 测试

网友评论

      本文标题:Unitils H2 测试基础设施

      本文链接:https://www.haomeiwen.com/subject/aqncixtx.html