1.1.1 Unitils 模块
下面的向导文件讲述Unitils 的模块系统和所提供的模块。我们从解释怎么配置测试环境并将让你的测试使用这些模块开始。子章节会深入的描述这些模块的功能。
配置
对于任何一个项目,unitils 需要一些配置。默认情况下,有三个级别的配置,每个级别可以覆盖前一个配置。
1. Unitils-defaults.properties:默认配置文件,在Unitils自己的发布包中。
2. Unitils.propertis:包含项目范围的配置
3. Unitils-local.properites:包含用户规范配置
第一个文件,Unitils-defaults.properties,包含默认值并且被打包在Unitils.jar.你不需要改变这个文件,不过你可以用来做参考,因为他包含了所有对Unitils的可能配置
第二个文件,unitils.propertis ,可以覆盖默认配置,并且一个项目中所有开发人员通用的配置都可以放在这里。例如你的项目用到的数据库配置都是一样的,那么你可以建立一个Unitils.properties文件,他会覆盖默认的驱动类和Url属性
database.driverClassName=oracle.jdbc.driver.OracleDriver database.url=jdbc:oracle:thin:@yourmachine:1521:YOUR_DB
这个文件不是必须的,但是如果你新建了一个,它应该被放在你项目的类路径下。你可以查看一个包含了常用配置的模板文件从这里 unitils.properties。
最后的文件,Unitils-local.properties,一样是可选的,一般包含开发人员自己的特殊配置,而且会覆盖项目配置的信息。例如如果每个用户自己的unit-test数据库用户不同,你可以建立一个unitils-local.properties为每一个用户,包含自己的数据库用户名和密码以及数据库名。
database.userName=john database.password=secret database.schemaNames=test_john
unitils-local.propertis文件应该被放在用户自己相应的文件夹(system.getProperty(“user.home”)).重用的配置模板你可以在这里找到unitils-local.properties 。
这个本地配置文件名称,你也可以自己定义。这样你就可以为每个项目起个不同的名字。例如,你正在项目1上使用Unitils,并且你想在新开始的项目2上使用。那么在项目2的Unitls.properties文件增加如下属性,让项目2的Unitils使用projectTwo-local.properties作为用户本地配置即可。
unitils.configuration.localFileName=projectTwo-local.properties
Unitils通过一个测试监听系统给测试类提供服务。首先需要让你的项目可以使用Unitils。你的类只需要继承(间接)Unitils基础测试类就可以了。目前对主流的测试框架已经有基础的类:
JUnit3: org.unitils.UnitilsJUnit3 JUnit4: org.unitils.UnitilsJUnit4 TestNG: org.unitils.UnitilsTestNG
这里有个例子,如果你使用的是Junit3,那么这样便可以使用Unitils了:
import org.unitils.UnitilsJUnit3; public class MyTest extends UnitilsJUnit3 { }
通常你会建立自己的测试基类,里面会包含一些测试类公用的方法,例如数据源注入等,那么就让这里基类从Unitils基类继承既可以。
当你使用Junit4 你也可以通过注解来实现从Unitils基类的继承
import org.junit.runner.RunWith; import org.unitils.UnitilsJUnit4TestClassRunner; @RunWith(UnitilsJUnit4TestClassRunner.class) public class MyTest { }
如果你不想从Unitils基类来继承,你也可以通过拷贝Unitils基类的源码(如UnitilsJunit3)来建立一个自定义的父类,这个类你仍然可以从其他类来继承,例如Spring的AbstractDependencyInjectionSpringContextTests(Junit3测试类的子类)
在开始例子以前,我们先看看一些基本的概念和功能。
Unitils被设计成容易扩展新模块的系统。每个模块通过监听测试的执行情况来提供服务并在需要的时候触发适当的动作。
Unitils提供的测试基类(UnitilsJUnit3, UnitilsJUnit4, UnitilsTestNG),通过模块监听系统和测试类联系起来。
如果需要你的测试类提供扩展的服务,这个机制提供了统一的方式,可以使用灵活的方式增加服务而不改变测试类的父类。增加新的服务是比较简单的,就像增加一个新的模块并注册这个模块在Unitils的配置文件里一样。
目前,Unitils提供了如下的模块: