使用 JUnit 测试 Java 应用程序 课堂笔记(三)
一.测试驱动的开发(TDD)
1.定义:先开发测试用例,再编写应用程序代码,用于驱动软件设计。
2.步骤:
- ①创建测试场景 编写测试用例
- ②编写应用程序代码
- ③运行测试 若失败则重复②③ / 若成功则④
- ④重构应用程序代码
3.TDD 优点:
- 调试时间减少:代码根据定义的测试用例开发。
- 灵活、可维护和可扩展的代码:采用此技术开发的软件是松散耦合且可轻松维护的。
- 关键分析和设计:设计了测试场景并编写了测试用例时才开发代码。
- 可执行文档:测试用例可由其他程序员参考,以了解代码用法及其用途。
- 面向用户的开发:测试用 例是从用户角度编写的。
4.有效测试的准则:
- 识别并测试方法的 边界条件,因为方法实际上是在其边界值上生成意外结果。
- 验证 测试结果,因为还要预料得到不正确的结果。
- 了解意外问题,借助模拟对象 模拟这些错误 并将它们注入代码。
- 通过不同策略 交叉检查 测试用例的结果。
- 应用程序代码应该进行良好 优化 以处理大型复杂值,并且必须始终返回准确结果。
5.有效测试的属性:
- 自动: 单元测试应该 自动运行,并且没有任何外部依赖,所有连接和配置应该由测试完成。
- 彻底: 测试用例应该覆盖代码的所有方面并提供 100% 的代码覆盖率。
- 独立: 测试用例应该是 独立 于其他测试用例并且松散耦合的。不得对其他测试用例或者类具有任何依赖。
- 专业: 测试应该符合生产 标准 并且代码应该发送给生产服务器。
- 可重复: 测试用例应该是 可重复的,并且在执行时生成同样结果。
6.常见编程问题:
- 不可忽视中断失败的测试用例
- 如果代码处理小数值,那么应该总是使用浮点数对它进行测试
- 避免测试用例长时间运行
- 创建低耦合的测试用例
- 测试应该总是生成同样结果,无论在什么机器上执行
- 不要将任何类型的生产代码或者配置代码放到 main() 方法中
二.连续集成测试(CI)及使用 Jenkins
1.基本概念
CI 测试:应用程序将以一定的时间间隔彼此集成,以验证整体功能和稳定性。
CI 测试优点:
- 提供便捷的单元集成
- 允许自动部署
- 提供项目的运行状况报告
- 实现独立于平台的开发
- 提供项目的更好可视性
实现 CI 连续集成测试的工具(独立平台):
- Hudson
- Jenkins
一些 CI 杂谈:
- CI 测试是一种软件开发做法,团队成员 频繁集成工作 以加速调试过程。
- 连续集成测试方法开发的应用程序将更稳定可靠,因为应用程序的模块将 定期 进行集成。
- CI 测试能连续集成应用程序单元并在开发的 早期阶段 识别问题。
- CI 测试能在指定时间后 自动 部署模块。
- CI 测试可以生成项目的 运行状况报告。
- CI 测试提供了环境以在 不同平台上 集成和测试模块。
2.Hudson 简介
简介:Hudson 运行在 Glassfish 或 Apache Tomcat 之类的服务器上,可执行 Ant 和 Maven 项目。
优点:可轻松安装,通过 基于WEB 的 UI 配置,跟踪 jar 文件及其版本。
执行构建后操作:
- 生成 JUnit 测试结果报告:以 .xml 格式保存到指定路径。
- 发送电子邮件通知:向开发人员发送电子邮件通知不稳定的工作版本。
3.Jenkins 简介
- Jenkins 起初作为 Hudson 项目开发,和 Hudson 简介基本相同,但是比 Hudson 有更多的更新和补丁。
- 要启动 Jenkins,需要访问位于端口 8080 的 localhost 服务器。
- Jenkins 能将所有模块组合到一个*储存库并将它们构建在一起。
- 分析工作版本状态图标:
- 分析工作版本稳定性图标:
- 注册:
- 使用 Jenkins 构建项目,需要配置 JDK、Ant 和 Maven 路径:
- 在 Jenkins 上执行 CI 测试,执行以下步骤:
- 1. 创建新项。
- 2. 配置该项(见下图构建触发器 Build Triggers)。
- 1+2.上面两步创建了项目,显示:
- 3. 创建工作空间(在 Jenkins 安装文件夹中寻找 workspace)。
- 4. 将文件复制到此工作空间(将 IDE 上的项目源文件复制到 Jenkins 安装处的 workspace)。
- 常用的构建触发器是:
- 在其他项目构建之后构建 / 定期构建:
- 不断循环构建,时间设置:
默认情况下,Jenkins 抽取到当前用户的 .jenkins 文件夹。