`

Unitils概述

 
阅读更多


Unitils测试框架目的是让单元测试变得更加容易和可维护。Unitils构建在DbUnit与EasyMock项目之上并与JUnit和TestNG相结合。支持数据库测试,支持利用Mock对象进行测试并提供与Spring和Hibernate相集成。Unitils设计成以一种高度可配置和松散耦合的方式来添加这些服务到单元测试中,目前其最新版本是3.1。


Unitils功能特点


自动维护和强制关闭单元测试数据库(支持Oracle、Hsqldb、MySQL、DB2)。


简化单元测试数据库连接的设置。


简化利用DbUnit测试数据的插入。


简化Hibernate session管理。


自动测试与数据库相映射的Hibernate映射对象。


易于把Spring管理的Bean注入到单元测试中,支持在单元测试中使用Spring容器中的Hibernate SessionFactory。


简化EasyMock Mock对象创建。


简化Mock对象注入,利用反射等式匹配EasyMock参数。


Unitils模块组件


Unitils通过模块化的方式来组织各个功能模块,采用类似于Spring的模块划分方式,如unitils-core、unitils-database、unitils-mock等。比以前整合在一个工程里面显得更加清晰,目前所有模块如下所示:


unitils-core:核心内核包。


unitils-database:维护测试数据库及连接池。


unitils-DbUnit:使用DbUnit来管理测试数据。


unitils-easymock:支持创建Mock和宽松的反射参数匹配。


unitils-inject:支持在一个对象中注入另一个对象。


unitils-mock:整合各种Mock,在Mock的使用语法上进行了简化。


unitils-orm:支持Hibernate、JPA的配置和自动数据库映射检查。


unitils-spring:支持加载Spring的上下文配置,并检索和Spring Bean注入。


Unitils的核心架构中包含Moudule和TestListener两个概念,类似Spring中黏连其他开源软件中的FactoryBean概念。可以看成第三方测试工具的一个黏合剂。


通过TestListener可以在测试运行的不同阶段注入某些功能。同时某一个TestListener又被一个对应的Module所持有。Unitils也可以看成一个插件体系结构,TestListener在整个Unitils中又充当了插件中扩展点的角色,从TestListener这个接口中我们可以看到,它可以在crateTestObject、before(after)Class、before(after)TestMethod、beforeSetup、afterTeardown的不同切入点添加不同的动作。


Unitils配置文件


unitils-defaults.properties:默认配置文件,开启所有功能。


unitils.properties:项目级配置文件,用于项目通用属性配置。


unitils-local.properties:用户级配置文件,用于个人特殊属性配置。


Unitils的配置定义了一般配置文件的名字unitils.properties和用户自定义配置文件unitils-local.properties,并给出了默认的模块及模块对应的className,便于Unitils加载对应的模块module。但是如果用户分别在unitils.properties文件及unitils -local.properties文件中对相同属性配置不同值时,将会以unitils-local.properties 的配置内容为主。


Unitils断言


典型的单元测试一般都包含一个重要的组成部分:对比实际产生的结果和希望的结果是否一致的方法,即断言方法(assertEquals)。Unitils 为我们提供了一个非常实用的断言方法,我们以第2章中编写的用户领域对象User为蓝本,比较两个User对象的实例来开始认识Unitils的断言之旅。


assertReflectionEquals:反射断言


在Java世界中,要比较现有两个对象实例是否相等,如果类没有重写equals()方法,用两个对象的引用是否一致作为判断依据。有时候,我们并不需要关注两个对象是否引用同一个对象,只要两个对象的属性值一样就可以了。在JUnit单元测试中,有两种测试方式进行这样的场景测试:一是在比较实体类中重写equals()方法,然后进行对象比较;二是把对象实例的属性一个一个进行比较。不管采用哪种方法,都比较烦锁,Unitils为我们提供了一种非常简单的方法,即使用ReflectionAssert.assertReflectionEquals方法, 如代码清单16-11所示:


代码清单16 11  assertReflectionEquals 反射断言测试 

package com.baobaotao.test;  
import java.util.*;  
import org.junit.Test;  
import static org.unitils.reflectionassert.ReflectionAssert.*;  
import static org.unitils.reflectionassert.ReflectionComparatorMode.*;  
import com.baobaotao.domain.User;  
 
public class AssertReflectionEqualsTest {  
    @Test  
    public void testReflection(){  
        User user1 = new User("tom","1234");  
        User user2 = new User("tom","1234");  
        ReflectionAssert.assertReflectionEquals(user1, user2);  
    }  
 
}  
 

 

 

 

ReflectionAssert. AssertReflectionEquals(期望值,实际值,比较级别)方法为我们提供了各种级别的比较断言。下面我们依次介绍这些级别的比较断言。


ReflectionComparatorMode.LENIENT_ORDER:忽略要断言集合collection 或者array 中元素的顺序。


ReflectionComparatorMode.IGNORE_DEFAULTS:忽略Java类型默认值,如引用类型为null,整型类型为0,或者布尔类型为false时,那么断言忽略这些值的比较。


ReflectionComparatorMode.LENIENT_DATES:比较两个实例的Date是不是都被设置了值或者都为null,而忽略Date的值是否相等。


assertLenientEquals:断言


ReflectionAssert 类为我们提供了两种比较断言:既忽略顺序又忽略默认值的断言assertLenientEquals,使用这种断言就可以进行简单比较。下面通过实例学习其具体的用法,如代码清单16-12所示。


代码清单16 12  assertLenientEquals断言测试

package com.baobaotao.test;  
import java.util.*;  
…  
public class AssertReflectionEqualsTest {  
      Integer orderList1[] = new Integer[]{1,2,3};  
      Integer orderList2[] = new Integer[]{3,2,1};  
 
          
        //① 测试两个数组的值是否相等,忽略顺序  
        //assertReflectionEquals(orderList1, orderList2,LENIENT_ORDER);  
        assertLenientEquals(orderList1, orderList2);  
 
          
        //② 测试两个对象的值是否相等,忽略时间值是否相等  
        User user1 = new User("tom","1234");  
        Calendar cal1 = Calendar.getInstance();  
        user1.setLastVisit(cal1.getTime());  
        User user2 = new User("tom","1234");  
        Calendar cal2 = Calendar.getInstance();  
        cal2.set(Calendar.DATE, 15);  
        user2.setLastVisit(cal2.getTime());  
        //assertReflectionEquals(user1, user2,LENIENT_DATES);  
        assertLenientEquals(user1, user2);  
}  

  

 

 

 

assertPropertyXxxEquals:属性断言


assertLenientEquals 和assertReflectionEquals 这两个方法是把对象作为整体进行比较,ReflectionAssert 类还给我们提供了只比较对象特定属性的方法:assertPropertyReflection   Equals()和assertPropertyLenientEquals()。下面通过实例学习其具体的用法,如代码清单16-13所示。


代码清单16 13  assertPropertyXxxEquals属性断言

package com.baobaotao.test;  
import java.util.*;  
…  
public class AssertReflectionEqualsTest {  
      User user = new User("tom","1234");  
      assertPropertyReflectionEquals("userName", "tom", user);  
      assertPropertyLenientEquals("lastVisit", null, user);  
} 
 

 assertPropertyReflectionEquals()断言是默认严格比较模式但是可以手动设置比较级别的断言,assertPropertyLenientEquals()断言是具有忽略顺序和忽略默认值的断言。

 

 

 

分享到:
评论

相关推荐

    Unitils教程(介绍Unitils的最佳资料)

    Unitils 教程 - 单元测试的最佳实践 Unitils 是一个开源的测试库,它提供了一些实用的工具和方法来帮助开发者编写单元测试。本教程将向您展示如何使用 Unitils 来编写单元测试,并介绍一些常见的单元测试技术。 ...

    Unitils单元测试

    Unitils的模块化设计是其另一大特点,包括unitils-core(核心模块)、unitils-database(数据库管理)、unitils-DbUnit(DbUnit集成)、unitils-easymock(EasyMock支持)、unitils-inject(对象注入)、unitils-...

    Spring.3.x企业应用开发实战(完整版).part2

    16.4.1 Unitils概述 16.4.2 集成Spring 16.4.3 集成Hibernate 16.4.4 集成Dbunit 16.4.5 自定义扩展模块 16.5 使用Unitils测试DAO层 16.5.1 数据库测试的难点 16.5.2 扩展Dbunit用Excel准备数据 16.5.3 测试实战 ...

    Spring3.x企业应用开发实战(完整版) part1

    16.4.1 Unitils概述 16.4.2 集成Spring 16.4.3 集成Hibernate 16.4.4 集成Dbunit 16.4.5 自定义扩展模块 16.5 使用Unitils测试DAO层 16.5.1 数据库测试的难点 16.5.2 扩展Dbunit用Excel准备数据 16.5.3 测试实战 ...

    Unitils-jar包

    Unitils 测试框架目的是让单元测试变得更加容易和可维护。Unitils 构建在DbUnit 与 EasyMock 项目之上并与JUnit 和TestNG 相结合。支持数据库测试,支持利用Mock 对象 进行测试并提供与Spring 和Hibernate 相集成。...

    Unitils示例

    **Unitils 示例** Unitils 是一个强大的 Java 单元测试框架,它提供了丰富的功能来简化测试过程,包括数据库集成测试、模拟对象以及依赖注入。在本示例工程中,我们将会探讨 Unitils 如何与 DBUnit 和 EasyMock ...

    使用Unitils测试DAO

    标题“使用Unitils测试DAO”涉及的是在Java开发中如何利用Unitils库来高效地测试数据访问对象(DAO)层的代码。Unitils是一个强大的、易于使用的集成测试框架,它简化了诸如数据库、ORM(对象关系映射)框架如...

    unitils整合dbunit利用excel进行单元测试

    unitils整合dbunit利用excel进行单元测试 包含mock以及整合spring进行测试

    Unitils-core-3.3.jar

    Unitils-core-3.3的jar包

    unitils-3.3-with-dependencies.zip

    "Unitils-3.3-with-dependencies.zip" 是一个包含Unitils 3.3版本及其所有依赖库的压缩包文件。Unitils是一个流行的Java开发框架,专注于自动化单元测试和集成测试。这个压缩包包含了运行和使用Unitils所需的所有...

    unitils-2.2

    Unitils 是一个强大的Java开发框架,专为简化单元测试和集成测试而设计。它提供了对数据库、Spring框架以及其他模块的全面支持,使得测试过程更加高效和便捷。在深入探讨Unitils的功能之前,让我们先理解一下单元...

    Integrete unitils for database(dao) testing

    标题 "Integrete unitils for database(dao) testing" 提示我们关注的是如何在数据库(DAO)测试中集成Unitils库。这篇博文可能是作者Caerun在iteye博客上分享的一种方法,用以提高测试效率和质量。让我们深入探讨...

    Unitils框架与模块扩展

    Unitils框架与模块扩展Unitils这个Java开源包的目的是让单元测试变得更加容易和维护。Unitils构建在DBUnit与EasyMock项目之上并与JUnit和TestNG相结合,支持数据库测试,支持利用mock对象进行测试并提供与Spring和...

    spock-unitils-0.7-groovy-2.0.zip

    标题 "spock-unitils-0.7-groovy-2.0.zip" 暗示这是一个软件库,可能是一个测试框架或工具,结合了Spock、Unitils和Groovy技术。Spock是一个基于JVM的BDD(行为驱动开发)框架,主要针对Groovy和Java语言,提供了一...

    unitils-selenium:使用 Selenium 测试 Web 应用程序的 Unitils 模块-开源

    Unitils 模块 - 启动 Selenium Web 驱动程序以测试 Web 应用程序的简单方法。

    Unitil学习

    Unitils(Unit测试实用工具)是一个开源的Java库,旨在提供一套测试准则以及一套便捷的代码库,以帮助开发者进行更加务实的单元测试。单元测试是软件开发中一个重要的步骤,它对代码中单个单元进行测试,以确保其...

    对dbunit进行mybatis DAO层Excel单元测试(必看篇)

    在使用dbunit之前,需要在pom.xml文件中添加相关的依赖项,包括unitils-core、unitils-dbunit、unitils-io、unitils-database和unitils-spring等。同时,需要在resource文件夹下创建一个unitils.properties配置文件...

    改资源配准测试

    在“改资源配准测试”这个主题中,我们重点探讨的是如何利用unitils和dbUtils这两个工具进行有效的资源管理和测试。下面将详细阐述这两个工具的使用及其在测试中的应用。 首先,Unitils是一个流行的Java集成测试...

    junit单元测试jar包集

    这里提到的四个文件是Java开发中常用的单元测试框架和库,分别是JUnit、DBUnit、Unitils和Mockito。让我们逐一深入探讨它们的功能和使用方法。 **JUnit** 是Java领域中最广泛使用的单元测试框架,这里的`junit-4.11...

Global site tag (gtag.js) - Google Analytics