单元测试实践
1.测试框架选择Unitils
为什么选择Untils作为本次项目单元测试框架呢?
Unitils的优点和介绍网上都比较详细:http://www.unitils.org/summary.html;它的主要模块有:
· DatabaseModule: 测试数据库维护和连接池
· DbUnitModule: 使用DBunit进行测试数据维护
· HibernateModule: Hibernate配置支持和自动的数据库mapping检查
· MockModule: 支持使用Unitils的mock框架进行mock创建
· EasyMockModule: 支持使用EasyMock的mock框架进行mock创建
· InjectModule: 支持注入mock对象到其他对象中
· SpringModule: 支持载入Spring配置文件、检索或注入Spring Beans
本次项目并没有全部用到它的所有特性,其中我使用到的优秀特性和功能有:
· 为Spring集成的单元测试提供很好的解决方案
· 数据库相关测试的数据准备,事务回滚
· 简单方便的Assert工具
2.在测试中使用Unitils
方法一. 继承UnitilsJUnit4
方法二. 在测试类上添加annotation:@RunWith(UnitilsJUnit4TestClassRunner.class)
方法三. 拷贝UnitilsJUnit3(UnitilsJUnit4)的代码生成一个MyUnitilsJunit3,然后测试类继承这个类。这种方法的好处是MyUnitilsJunit3可以随意继承一个Junit3 TestCase 的子类,比如: AbstractDependencyInjectionSpringContextTests,从而可以更加方便的加入自己需要的功能。
3.使用Unitils进行Spring集成的单元测试
在基类中设置公用的Spring 配置
@SpringApplicationContext( {"/bean/profile/base-beans.xml"}) public class DAOTestBase extends UnitilsJUnit4{ } 子类中特殊化的Spring配置 public class UserDAOTest extends DAOTestBase{ @SpringApplicationContext( {"/bean/profile/base-beans.xml","/bean/profile/extra-beans.xml"}) protected ApplicationContext applicationContext; @SpringBean("userDAO") private UserDAO userDAO; @SpringBeanByName private UserDAO userDAO; @SpringBeanByType private UserDAO userDAO; } |