单元测试实践
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的方式则不行。
- 大小: 44.4 KB
- 大小: 42.9 KB
分享到:
相关推荐
持续集成与单元测试是现代软件开发中至关重要的两个实践。持续集成关注于通过频繁地集成代码到主分支上,从而及早发现并解决集成问题;而单元测试则强调编写和执行代码中最小可测试单元的测试代码,确保这些单元的...
综上所述,Flex持续集成之单元测试涉及到Flex应用程序的模块化测试,采用FlexUnit作为测试框架,通过持续集成工具确保代码质量。开发者应该熟练掌握这些技术,以实现高效、可靠的开发流程。通过学习和实践,可以提升...
持续集成(Continuous Integration,CI)和持续交付(Continuous Delivery,CD)是企业IT实践中两个非常重要的概念,它们之间紧密相连,都是为了提高软件开发、测试和部署的效率和质量。下面我们将深入探讨这两个...
研究识别了30种方法及其相关工具,这些方法和工具在以下方面促进了持续实践的实施:1) 缩短持续集成(CI)中的构建和测试时间;2) 增加CI中构建和测试结果的可见性和意识;3) 支持(半)自动化连续测试;4) 检测CI中...
持续集成实践作为软件开发领域的一项重要实践,是保障软件开发质量、提高开发效率的重要手段。该实践强调开发团队成员频繁地集成他们的工作成果,通常每人每天至少集成一次,从而尽早发现和解决问题,减少集成的...
持续集成技术与单元测试方法 内容包括以下: 持续集成技术 – 持续集成的基本概念 – 持续集成的作用和优点 – 如何实施持续集成 • 单元测试技术 ...– 单元测试实践中常见的问题 – 单元测试工具
### 持续集成测试工具与实践案例分享 在当今快速发展的软件开发领域,持续集成(CI)已经成为提升软件质量、加速开发周期的关键技术之一。本文将深入探讨持续集成测试工具及其实践案例,特别是聚焦于一种名为Toast的...
2. 结合版本控制系统,实现测试的自动化与持续集成。 七、最佳实践 1. 遵循单一职责原则,使测试更加简单明了。 2. 使用命名约定,使测试用例易于理解和维护。 3. 及时更新测试用例,当代码修改后确保测试仍能捕获...
2. **单元测试**:单元测试是持续集成的基础,它验证代码的最小可测试单元,如函数或方法。PHP中的单元测试框架主要是PHPUnit,它可以帮助开发者编写和执行测试用例,确保代码功能的正确性。 3. **Sonar**:Sonar是...
通过阅读《敏捷实践之持续集成》的相关资料,如“持续集成.mm”、“敏捷实践之持续集成(V1.0).ppt”以及“持续集成测试.txt”,我们可以获取更多关于如何在实际项目中实施和优化持续集成策略的深入见解和案例研究...
在iOS开发中,单元测试通常还会与持续集成工具相结合,比如Jenkins、Travis CI等,以便在软件开发的各个环节中自动执行测试,并及时获得反馈。这种做法有利于持续监控应用代码的质量,并确保应用随着开发过程的推进...
持续集成(Continuous Integration, CI)是一种软件开发实践,它强调开发人员频繁地将他们的代码更改合并到主分支,通常每天至少一次。这一过程伴随着自动化构建和测试,以尽早发现和修复错误,从而提高软件质量与...
持续集成是软件开发中的一种实践,开发者可以频繁地(一天多次)将代码集成到共享仓库中。每次代码集成通过自动化构建(包括编译、测试等)来验证,从而尽快地发现集成错误。Jenkins可以配置定时构建任务,并在构建...
无论是单元测试、集成测试还是系统测试,都是确保软件质量的防线。测试自动化是CI/CD成功的关键,它减少了手动测试的时间和错误,提高了测试覆盖率和效率。通过自动化测试,可以快速验证软件的功能和性能,确保每次...
在软件开发领域,持续集成(Continuous Integration, CI)是一种实践,它要求开发者频繁地将他们的代码更改合并到主分支,通常每天至少一次,甚至更频繁。这样做可以尽早发现并解决代码冲突,减少集成难题,提高软件...