参考java测试心得总结--测试培训计划
参考java测试心得总结1__JUnit测试基本使用
Unit addons
JUnit-addons is a collection of helper classes for JUnit. This library can be used with both JUnit 3.7 and JUnit 3.8.x
http://sourceforge.net/projects/junit-addons
1. junitx.framework包主要功能
该包以类方法的方式扩展junit.framework.Assert的功能。
也就是这时候,可以不用继承相应的类,可以直接使用断言的相关的功能。事实上基于元数据的测试框架都基本采用这种方式实现断言。
junitx.framework.Assert
junitx.framework.ArrayAssert
junitx.framework.ComparableAssert
junitx.framework.FileAssert
junitx.framework.ListAssert
junitx.framework.ObjectAssert
junitx.framework.NamingAssert
junitx.framework.OrderedTestSuite
junitx.framework.StringAssert
junitx.framework.ThrowableAssert
2. 测试类的私有属性
2.1 测试类的私有属性的实现
使用相关类(junitx.util.PrivateAccessor)的方法类访问私有属性和方法。
参考:
Example\JUnit_Addons_Example\example1目录下
example1.TestAccount类
example1.Account类
2.2 实现访问类的属性和方法的原理
利用Java的反射机制来实现的。
使用java.lang.Class的相关方法,获得相关指定对象的Field,然后调用
field.setAccessible(true);绕过访问权限的检查,然后可以访问Field的值,当然
也可以设置Field的值。
使用java.lang.Class的相关方法,获得相关指定对象的Method;然后调用
field.setAccessible(true);绕过访问权限的检查;最后执行该方法.
3. junitx.extensions包主要功能
这个包实际上在使用模板方法模式创建测试用例工具类。
使用了模板方法模式,定义抽象类,把相关的测试方法给出具体实现,把被测试对象的创建放到基本方法中。
JUnit-addons框架自己的例子有:
junitx.extensions.ComparabilityTestCase
junitx.extensions.EqualsHashCodeTestCase
junitx.extensions.SerializabilityTestCase
这几个类都定义了几个抽象方法,这些方法主要是用于创建对象的方法,需要在具体类里面实现这些方法。在TestSuite里面,增加测试用例是通过,使用类的无参数构造器来实现的,因此上面的这些类,为了实现测试对象的注入,采用了set注入的方式,而不是构造器注入方式。
参考例子:Example\JUnit_Addons_Example\example1\src\extensions目录下extensions.WdzEqualsHashCodeTestCase类
其实,根据IOC的原理,可以把上面几个类的类结构修改下,可以考虑采用构造注入的方式,更好些,不用去定义一些具体类。不过,如果采用构造注入这种方式,需要定义自己的的TestRunner了。
参考:
Example\JUnit_Addons_Example\example1\src\extensions目录下
Extensions.WdzComparabilityTestCase类实际上是使用IOC来实现上面的
junitx.extensions.ComparabilityTestCase的业务目标;采用类似的方法,可以对上面的junitx.extensions.EqualsHashCodeTestCase,junitx.extensions.SerializabilityTestCase进行重构。