14.单元测试

14.单元测试

依赖注入让你的代码更少地依赖容器,这不同于传统的Java EE开发。组成应用程序的POJO应当能在JUnit或TestNG测试框架中进行测试,对象只需使用new运算符实例化,而无需Spring或任何其他容器。开发者可以使用mock对象(第14.1节)(与其他有用的测试技术协同) 来隔离测试代码。如果遵循Spring的体系结构的建议,那么编写层次清晰和组件化的代码能更便于单元测试。例如,可以通过tubbing、mock DAO或Repository接口对服务层对象进行测试,而无需在运行单元测试时访问持久化数据。
真正的单元测试一般都运行得飞快,因为在运行时无需再作配置。将这种真正的单元测试作为开发方法的一部分能提高开发者的效率。也许你无需阅读“测试”这一章节来帮助你编写基于IoC的单元测试。但是,对于某些单元测试方案,Sping框架提供了以下mock对象和测试支持类。

14.1 mock对象

14.1.1 环境

org.springframework.mock.env包包含环境和PropertySource抽象的mock实现(请参看第7.13.1节“bean定义的profiles”和第7.13.2节“PropertySource抽象”)。MockEnvironmentMockPropertySource对于开发依赖于环境特定属性的代码的外测试非常有用。

14.1.2 JNDI

org.springframework.mock.jndi包中包含JNDI SPI的实现,开发者可以使用该实现为测试套件或独立应用程序设置简单的JNDI环境。例如,如果JDBC DataSources在测试代码与Java EE容器中的JNDI名称绑定到相同的名称,那么可以在测试场景中复用应用程序代码和配置,而无需进行修改。

14.1.3 Servlet API

org.springframework.mock.web包包含一组全面的Servlet API mock对象,这些对象有用于测试Web上下文、控制器和过滤器。这些mock对象是针对Spring Web MVC框架使用的,通常比动态mock对象(例如easymock)或其他Servlet API mock对象(例如MockObjects)更方便。从Spring 4.0框架开始, org.springframework.mock.web包中的一组mock基于Servlet 3.0 API。
有关Spring MVC和REST控制器与Spring MVC的WebApplicationContext配置进行全面集成测试,请参看Spring MVC Test Framework(第15.6节)。

14.2 单元测试支持类

14.2.1 通用的测试工具

org.springframework.test.util包包含一些用于单元和集成测试的通用工具。
ReflectionTestUtils是基于反射的工具方法集合。开发者在测试需要更改常量值、设置非公共字段、调用非公共 setter 方法或调用非公共配置或生命周期回调方法的场景中,在涉及测试用例的应用程序代码时,都可以使用这些方法。

  1. ORM框架(例如JPA和Hibernate)用到private或protected的字段访问,而不是在公共的setter方法设置实体属性。
  2. Spring对注解的支持(例如@Autowired、@Inject和@Resource等)为声明为private或protected的字段、setter方法和配置方法提供依赖注入。
  3. 使用注解(例如@PostConstruct和@PreDestroy等)用于生命周期的回调方法。

AopTestUtils是与AOP相关的工具方法集合。这些方法可用于获取对隐藏在一个或多个Spring代理后面的底层目标对象的引用。例如,如果已经使用EasyMock或Mockito等库将bean配置为动态mock,并且包装在Spring代理中,当需要直接访问它们判断配置是否正确或执行验证时,这些方法就派上用场。有关Spring的核心AOP实用工具,请参看AopUtilsAopProxyUtils

14.2.2 Spring MVC

org.springframework.test.web包包含ModelAndViewAssert,开发者可以将它配合JUnitTestNG或其他测试框架一起使用,用于处理Spring MVC ModelAndView对象的单元测试。

提示:如果想将Spring MVC Controller作为POJO进行单元测试,请在Spring的Servlet API Mocks(第14.1.3节)中将ModelAndViewAssert配合 MockHttpServletRequestMockHttpSession等框架一起使用。有关Spring MVC和REST控制器与Spring MVC的 WebApplicationContext配置进行全面集成测试,请改用Spring MVC测试框架(第15.6节)。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
单元测试计划书 1. 项目概述 本项目是一个软件开发项目,旨在开发一个新的软件产品。该产品将提供一系列功能,包括数据存储、数据处理、用户界面等。 2. 测试目的 本计划的目的是为了确保软件的各个单元能够正常运行,以便在软件开发的早期发现和解决问题,提高软件质量和稳定性,同时减少后期开发成本。 3. 测试范围 本测试计划将覆盖所有软件单元,包括但不限于数据存储、数据处理、用户界面等。 4. 测试方法 本测试计划将使用自动化测试方法进行单元测试,具体测试方法如下: - 对于每个单元,编写测试用例进行测试 - 使用自动化测试工具进行测试,包括但不限于JUnit、TestNG等 - 对于每个测试用例,记录测试结果和测试过程中的问题 5. 测试环境 测试环境包括但不限于以下环境: - 操作系统:Windows、Linux、MacOS等 - 浏览器:Chrome、Firefox、Safari等 - 数据库:MySQL、Oracle等 - 开发工具:Eclipse、IntelliJ IDEA等 - 自动化测试工具:JUnit、TestNG等 6. 测试资源 本测试计划需要的资源包括但不限于以下资源: - 开发人员提供的代码 - 测试用例 - 自动化测试工具 - 测试环境 7. 测试进度 本测试计划的进度如下: - 第一轮测试:开发完成后,进行单元测试 - 第二轮测试:在完成整体测试后,对发现的问题进行单元测试 - 第三轮测试:在产品发布前,进行单元测试 8. 测试人员 本测试计划需要的测试人员包括但不限于以下人员: - 质量保证人员 - 开发人员 9. 测试结果 测试结果将包括以下内容: - 每个单元的测试结果 - 测试用例的测试结果 - 测试过程中发现的问题 10. 测试报告 测试报告将包括以下内容: - 每个单元的测试结果 - 每个测试用例的测试结果 - 测试过程中发现的问题 - 对于每个问题,报告问题的原因和解决方案 - 最终测试结果 11. 测试风险 测试风险包括但不限于以下风险: - 测试用例不全面,无法覆盖全部功能 - 自动化测试工具无法覆盖某些功能 - 测试环境不同于生产环境,测试结果可能不准确 - 测试用例编写不正确,无法检测出问题 12. 测试措施 为避免测试风险,应采取以下措施: - 编写全面的测试用例,覆盖全部功能 - 使用多种自动化测试工具进行测试 - 尽可能使用与生产环境相同的测试环境 - 对每个测试用例进行审核,确保正确性 13. 测试验收标准 测试验收标准包括但不限于以下标准: - 所有单元测试通过 - 所有测试用例通过 - 问题解决并验证成功 14. 变更记录 版本号 变更内容 日期 V1.0 初步编写 2021年8月1日 V1.1 修改部分内容 2021年8月2日
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值