单元测试实践
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
本次项目并没有全部用到它的所有特性,其中我使用到的优秀特性和功能有:
l 为Spring集成的单元测试提供很好的解决方案
l 数据库相关测试的数据准备,事务回滚
l 简单方便的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;
}
4.使用DBunit进行数据库相关的测试
(1). 在unitils.properties当中进行配置
database.driverClassName=com.mysql.jdbc.Driver database.url=jdbc:mysql://192.168.205.62:3310/pro_general?characterEncoding=UTF-8
database.userName=profile
database.password=profile
database.schemaNames=pro_general
database.dialect=mysql
设置数据载入策略为先删除再插入。常用的载入策略有CleanInsertLoadStrategy; InsertLoadStrategy;RefreshLoadStrategy;UpdateLoadStrategy;顾名思义,这些策 略不 难理解。
DbUnitModule.DataSet.loadStrategy.default=org.unitils.dbunit.data setloadstrategy.impl.DeleteInsertLoadStrategy
数据集的格式支持多种,常用的有xml和excel,本项目中使用excel的xls文件(不是xlsx)。 毕竟excel的编辑更加方便。下面的配置指定默认数据集解析方式
DbUnitModule.DataSet.factory.default=org.unitils.dbunit.datasetfa ctory.impl.XlsDataSetFactory
(2). 在测试类中指定数据加载
@DataSet
public class TagTest extends DAOTestBase {
@ExpectedDataSet
public void testUpdate(){
}
}
Annotation @DataSet指明该类下的所有测试方法执行前都需要进行数据准备。DataSet中可以指明数据文件的具体路径和文件名,如果没有指定,默认在执行测试方法前先找${ClassName.methodName}的数据文件,再找${ClassName}的数据文件(文件格式为前面设置过的数据集格式)。
@ExpectedDataSet用于检查执行结果是否和预期一致。预期数据集文件和前面的数据准备文件查找过程类似只是文件名后面多了个“-result”。
5.使用Unitils事务保障数据库相关测试的一致性
@Transactional(TransactionMode.ROLLBACK)
在测试类或方法上添加Transactional Anotation,用于指定事务执行方式。这里提一下Unitils的一个bug,使用Transactional Anotation时测试类必须继承UnitilsJUnit4,用@RunWith的方式则不行。
![点击查看原始大小图片](http://dl2.iteye.com/upload/attachment/0019/8071/bcda6ded-4dbe-376f-a44c-eb5767856c47-thumb.jpg)
- 大小: 44.4 KB
![点击查看原始大小图片](http://dl2.iteye.com/upload/attachment/0019/8075/59d525bd-8c56-3fff-a968-a477af765939-thumb.jpg)
- 大小: 42.9 KB
分享到:
相关推荐
为什么选择Untils作为本次项目单元测试框架呢?Unitils的优点和介绍网上都比较详细:http://www.unitils.org/summary.html;它的主要模块有:·DatabaseModule:测试数据库维护和连接池·DbUnitModule:使用DBunit进行...
持续集成(Continuous Integration,CI)和持续交付(Continuous Delivery,CD)是企业IT实践中两个非常重要的概念,它们之间紧密相连,都是为了提高软件开发、测试和部署的效率和质量。下面我们将深入探讨这两个...
持续集成技术与单元测试方法 内容包括以下: 持续集成技术 – 持续集成的基本概念 – 持续集成的作用和优点 – 如何实施持续集成 • 单元测试技术 ...– 单元测试实践中常见的问题 – 单元测试工具
持续集成测试工具与实践案例分
持续集成实践pdf是一本专业的软件开发类参考图书,该书系统介绍了持续集成的基础理论、核心价值、实践步骤以及测试工具等内容,理论讲解浅显易懂,适合入门学习,
“持续集成”起源于极限编程开发.是它的12个基本原则之一,”...每次提交都应在持续集成机器上构建主干 保持快速的构建 在模拟生产环境中测试 让每个人都能轻易获得最新的可执行文件 每个人都能看到进度 自动化部署
持续集成从“配置管理”、“构建”、“测试”、“部署及发布”及“团队习惯”5个纬度考察其成熟度,每个维度都有5个级别,分别是“入门”、“新手”、“中等”、“进阶”和“疯狂”。目前在各个维度上,行业的平均...
持续集成(CI)是一种软件开发实践,它倡导团队开发成员协同工作,有需要的时候就对代码进行集成,不必要等到软件开发后期才开始集成。jenkins是一个CI工具。它可以根据设定持续定期编译,运行相应代码;运行UT或...
在提升软件质量、降低研发风险、拒绝浪费方面,处于敏捷实践领域的持续集成(Continuous Integration,CI)起到重要作用。持续集成能够解决研发工作中的80%任务(日常),而剩下的20%任务(非日常)需要研发团队智力...
如何有效的解决上面这些问题?首先想到的是持续集成,能够做到自动化、集成测试和及时反馈问题,才能减少开发和测试的成本,提高团队的工程能效。
单元测试框架深入与分享 ...* 在持续集成系统中运行单元测试。 单元测试框架是软件开发中不可或缺的一部分。使用适当的单元测试框架和Mock框架,可以提高代码的质量和可靠性,并减少软件测试的时间和成本。
本书除了介绍持续集成的基本原则和工具之外,也介绍了测试驱动、代码审查、数据库集成、信息反馈等实践和工具。书中的各种主题介绍了今天在持续集成领域中运用的各种方法,帮助读者衡量需要进行的折衷。
持续集成(CI)和持续发布(CD)是软件开发中的一种实践,旨在提高软件的质量和交付速度。 在这个案例中,我们将使用 k8s、Docker、Jenkins 和 Git 来实现持续集成与持续发布。该案例将涵盖以下知识点: 1. k8s ...
通过和自动化测试工具/框架的集成,CI环境中可以执行几乎所有的自动化测试,但是一个必须要考虑的问题是,持续集成中测试覆盖面和提供快速反馈之间的平衡。 结论 CD和CI是两种软件开发实践,它们都是敏捷开发和...
藏经阁-灵雀云持续集成和持续交付功能实践 在这篇文章中,我们将探讨灵雀云持续集成和持续交付功能实践的详细知识点。 什么是 DevOps? DevOps 是一种软件开发方法,它强调开发团队和运维团队之间的协作,以提高...
基于python开发语言,针对当前基于http,webservice的接口方式
持续集成包含自动编译、自动化的代码审查、自动部署和自动化测试这些步骤。...越来越多的公司开始引入持续集成实践,并且为之组建专门的团队(很多公司的持续集成团队成员最初都是来源于测试或者质量管理团队)。
持续集成(Continuous integration)是一种软件开发实践,即团队开发成员经常集成它们的工作,通过每个成员每天至少集成一次,也就意味着每天可能会发生多次集成。每次集成都通过自动化的构建(包括编译,发布,自动化...