日期:2014-05-16  浏览次数:20574 次

使用anntest进行基于数据库的单元测试

背景:

?

数据库相关的单元测试一直是单元测试中最令人头疼的问题,虽然dbunit在这一领域已经比较强大,但是依然有很多的缺陷。

?

1、数据的准备繁琐

?

无论是xml、xls、cvs还是sql,准备数据起来都不尽如人意

?

2、数据文件的维护量大

?

当数据库结构发生变化时,所有的数据文件都需要修改,如果没有修改,相关的测试就报错,当单元测试的错误越来越多时,开发人员就基本没有兴趣去维护这些测试了

?

3、在单元测试的代码中需要去写数据准备的代码

?

我很讨厌写这些代码,我只想测试我写的类而已

?

?

anntest 或许可以帮助你

?

?

anntest特点:

?

1、注释式配置数据(代码侵入性小)

?

2、数据配置集中化(数据库结构改了可以只改这里)

?

3、列准备数据(1000条数据只用一条注释)

?

4、可以对每个测试个性化自己需要的数据

?

5、多数据源支持,可以给几个不同的数据库同时准备

?

6、基于Spring-test ,Spring-test的东西都可以用

?

7、多种类型数据库支持

?

8、多样化的字段数据类型配置

?

?

anntest使用:

?

1、引入jar

?

Spring2.5:

<dependency>
       <groupId>com.taobao.anntest</groupId>
       <artifactId>anntest-spring2</artifactId>
       <version>1.2.0-SNAPSHOT</version>
</dependency>
?

Spring3.0:

<dependency>
       <groupId>com.taobao.anntest</groupId>
       <artifactId>anntest-spring3</artifactId>
       <version>1.2.0-SNAPSHOT</version>
</dependency>

?

2、表配置文件

在test的resources根目录下准备目录,目录名:anntest-config

? 里面的文件名为:表名.xml

?

例如:

?

?

<?xml version="1.0" encoding="UTF-8"?>
<table id="z_member">
	<column name="memberid" valueType="NUMBER" value="99999901" increase="true"/>
	<column name="nickname" valueType="VARCHAR" value="测试用户" increase="true"/>
	<column name="status" valueType="NUMBER" value="1"/>
	<column name="createtime" valueType="SYSTIME"/>
	<column name="updatetime" valueType="SYSTIME"/>
</table>
?

?

对应生成的数据为:

?

?

关于valueType的说明:

?

  • NULL:null
  • BLANK:空字符
  • VARCHAR:字符串类型
  • NUMBER:数字类型
  • SYSDATE:?当前日期(只有年月日)

可以使用 value="yyyy-MM-dd" 指定固定日期

  • SYSTIME:?当前时间

可以使用 ?value="yyyy-MM-dd HH:mm:ss" 指定固定时间

?

?

关于increase的说明:

?

适用于VARCHAR?、NUMBER、SYSDATE、SYSTIME类型

?

?

<column name="nickname" valueType="VARCHAR" value="测试用户" increase="true"/>

生成的数据为第一条: