共计 2346 个字符,预计需要花费 6 分钟才能阅读完成。
前言
单元测试通常是作为软件测试中基础的测试类型,用于测试单独的模块是否可以正常工作。它于功能测试不同,它更加关注的是代码内部的逻辑,而非是用户的需求。
单元测试定义
前面粗略了介绍了单元测试的定义,详细的解释是:单元测试也称为模块测试或组件测试。在软件开发过程中,检查软件的单个单元或模块是否正常工作,它是由开发人员在开发人员的环境中完成的。
软件测试通常划分为四个层次,每个层次都会去验证软件产品的功能,质量和性能指标。它们是:单元测试,集成测试,系统测试和验收测试。
单元测试的目标
- 隔离代码的每个部分。
- 确保单个模块功能正确。
- 在开发周期的早期,发现代码缺陷。
- 早期介入,以节省测试成本。
- 允许开发人员在以后重构或升级代码。
单元测试的优势
- 它在产品开发周期的早期发现问题。因此它降低了测试成本,早发现一个缺陷的成本要比晚发现它的成本低得多。
- 在改变现有功能(回归测试)时,它同时可以保证减少缺陷。
- 它简化了调试过程(测试驱动开发就是基于测试用例来完成功能开发)。调试是在程序中发现并解决妨碍软件正确运行的缺陷的过程。当实现单元测试时,发现测试失败时,只需要调试代码中所做的更改,就可以快速定位到错误。
- 由于更好的编码标准和实践,它给组织提供了更好的代码文档。
单元测试的内容
单元测试的方法
通常单元测试是使用白盒测试的方法
单元测试的类型
单元测试可以是手动测试或者是自动化测试
什么时候执行单元测试
它作为测试层次的第一层,通常是在集成测试之前完成。
单元测试有谁执行
它需要由对于代码内部逻辑熟悉的人执行,通常是开发或者是白盒测试人员。
单元测试有哪些具体的任务
首先需要准备单元测试计划:
- 准备测试计划
- 回顾测试计划
- 修订测试计划
- 定义单元测试计划的基准数据
其次是要准备测试用例和脚本:
- 准备测试环境和测试用例和脚本
- 回顾测试用例和脚本
- 修订测试用例和脚本
- 定义单元测试用例和脚本的基准数据
最后是单元测试的执行。
单元测试的工具
市面上有很多单元测试的工具,它们可用于协助单元测试。具体的单元测试的工具的选择还是要根据项目的具体情况决定,比如说项目的具体技术栈,是否可以重用已有的单元测试工具等。我们将提供以下几个示例:
Junit:
Junit 的目标是为 JVM 开发人员开发一个基础测试的测试框架。这包括关注 java 8 和更高版本,以及支持多种不同风格的测试。
TestNG:
TestNG 是一个受 JUnit 和 NUnit 启发的测试框架,但是它引入了一些新的功能,这些功能使它更加强大和易于使用,例如:
- 注释。
- 使用各种可用的策略在任意大的线程池中运行测试(所有方法都在自己的线程中,每个测试类一个线程,等等)。
- 测试您的代码是否是多线程安全的。
- 灵活的测试配置。
- 支持数据驱动测试(使用 @dataprovider)。
- 参数支持。
- 强大的执行模型(不再是 TestSuite)。
- 由各种工具和插件(eclipse、idea、maven 等)支持。
- 嵌入 BeanShell 以获得更大的灵活性。
- 运行时和日志记录的默认 JDK 函数(无依赖项)。
- 应用服务器测试的依赖方法。.
NUnit:
它是.net 语言的单元测试框架。最初是从 JUnit 移植而来的,目前的产品版本 3 已经被完全重写了,它有许多新特性,并且支持各种各样的.NET 平台。
xUnit.net:
xUnit.net 是一个免费的、开源的、面向社区的.net 框架单元测试工具 xunit.net 是由 nunit v2 的原始发明者编写的,它是用于 c、f、vb.net 和其他.net 语言单元测试的最新技术。xunit.net 与 resharper、coderash、testdriven.net 和 xamarin 一起工作。它是.NET 基金会的一部分,根据他们的行为准则运作。它是根据 Apache 2(OSI 批准的许可证)授权的。
JMockit:
JMockit 是开源的单元测试工具 jmockit 是一个用于开发人员测试的 java 工具包,包括模拟 api 和代码覆盖工具。
EMMA:
EMMA 是一个用于测量和报告 java 代码覆盖率的开源工具包。EMMA 支持大规模的企业软件开发,同时保持单个开发人员的快速工作和迭代团队中的每个开发人员现在都可以免费获得代码覆盖率,最主要的是可以很快的获得覆盖率!
PHPUnit:
PHPUnit 是一个面向程序员的 php 测试框架。它是单元测试框架的 xunit 架构的一个实例。
Cantata:
Cantata 是一个单元和集成测试工具,使开发人员能够在本地和嵌入式目标平台上验证标准兼容或业务关键代码。
Cantata 通过自动化,帮助加速符合标准的动态测试要求:
- 测试框架生成
- 测试用例生成
- 测试执行
- 结果诊断和报告生成
TestComplete:
TestComplete 是一个适用于多种应用类型和技术的自动化测试环境,包括(但不限于)Windows、.NET、WPF、Visual C++、Visual Basic、Delphi、C++Builder、Java 和 Web 应用程序和服务。
Mocha:
Mocha 是一个功能丰富的 javascript 测试框架,运行在 node.js 和浏览器中,使异步测试变得简单有趣。MOCA 测试连续运行,允许灵活且准确的报告,同时将异常异常映射到正确的测试用例。托管在 github 上。
Jasmine:
Jasmine 是一个用于测试 JavaScript 代码的行为驱动开发框架它不依赖于任何其他 JavaScript 框架它不需要 dom。而且它有一个干净、明显的语法,所以您可以轻松地编写测试。
总结
单元测试作为测试的第一层次,被很早引入项目。所以在项目开始前,我们同时需要对单元测试的技术选型和测试案例的计划进行准备。这样才可以在项目研发阶段,同时实现单元测试,以保证功能模块的功能。如果大伙有关于单元测试的一些看法,也请留言区回复和分享。