软件测试基础回顾(七)-单元测试
什么是单元测试?
软件应用程序的单元测试在应用程序的开发(编码)期间完成。
单元测试的目标是隔离一段代码并验证其正确性。在程序编程中,单元可以是单独的功能或过程
单元测试的目标是隔离程序的每个部分,并显示各个部分是正确的。单元测试通常由开发人员执行。
为什么单元测试?它为什么如此重要?
有时软件开发人员会尝试通过最少的单元测试来节省时间。这是一个神话,因为在完成应用程序后,在系统测试,集成测试甚至Beta测试期间减少单元测试会导致更高的缺陷修复成本。在开发阶段进行适当的单元测试最终节省了时间和金钱。
如何创建单元测试用例
单元测试通常是自动化的,但仍可以手动执行。IEEE不赞成其中一个。单元测试的手动方法可以采用逐步的指导文档。
在自动化方法下 -
- 开发人员可以在应用程序中编写另一部分代码来测试函数。他们稍后会注释掉,最后在应用程序完成后删除测试代码。
- 他们还可以隔离功能以更严格地测试它。这是一个更彻底的单元测试实践,涉及将功能复制并粘贴到自己的测试环境中,而不是其自然环境。隔离代码有助于揭示被测代码与产品中其他单元或数据空间之间不必要的依赖关系。然后可以消除这些依赖性。
编码人员可以使用UnitTest Framework来开发自动化测试用例。使用自动化框架,开发人员将标准编码到测试中以验证单元的正确性。在执行测试用例期间,框架会记录那些未通过任何标准的测试用例。许多框架还会自动标记并报告这些失败的测试用例。根据故障的严重程度,框架可能会停止后续测试。
模拟物体
单元测试依赖于创建的模拟对象来测试尚未成为完整应用程序一部分的代码段。模拟对象填写程序的缺失部分。例如,您可能有一个需要尚未创建的变量或对象的函数。在单元测试中,这些将以模拟对象的形式进行说明,这些模拟对象仅为在该部分代码上进行的单元测试而创建。
单元测试工具
有几种自动化工具可用于协助单元测试。我们将在下面提供几个例子:
- Junit:Junit是一个免费使用的测试工具,用于Java编程语言。它提供了断言来识别测试方法。此工具首先测试数据然后插入到代码段中。
- NUnit:NUnit被广泛用于所有.net语言的单元测试框架。它是开源工具,允许手动编写脚本。它支持可以并行运行的数据驱动测试。
- JMockit:JMockit是开源单元测试工具。它是具有行和路径指标的代码覆盖工具。它允许使用记录和验证语法来模拟API。此工具提供线路覆盖,路径覆盖和数据覆盖。
- EMMA:EMMA是一个开源工具包,用于分析和报告用Java语言编写的代码。Emma支持覆盖类型,如方法,行,基本块。它是基于Java的,因此没有外部库依赖,可以访问源代码。
- PHPUnit:PHPUnit是PHP程序员的单元测试工具。它占用了一小部分代码,称为单位,并分别测试每个代码。该工具还允许开发人员使用预定义的断言方法来断言系统以某种方式运行。
这些只是一些可用的单元测试工具。还有更多,特别是对于C语言和Java,但您肯定会找到一个单元测试工具,以满足您的编程需求,无论您使用何种语言。
极限编程和单元测试
极限编程中的单元测试涉及广泛使用测试框架。使用单元测试框架来创建自动化单元测试。单元测试框架并非极端编程所独有,但它们对于它至关重要。下面我们来看一下极限编程为单元测试带来的一些极端:
- 测试在代码之前编写
- 非常依赖于测试框架
- 应用程序中的所有类都经过测试
- 可以快速轻松地集成
单元测试神话
神话:它需要时间,我总是过度安排
我的代码坚如磐石!我不需要单元测试。
神话本质上是错误的假设。这些假设导致如下恶性循环 -
真相是单元测试提高了开发速度。
程序员认为Integration Testing将捕获所有错误并且不执行单元测试。一旦集成了单元,非常简单的错误(在单元测试中非常容易找到和修复)需要很长时间才能被跟踪和修复。
单元测试的好处和优势
- 希望了解单元提供的功能以及如何使用它的开发人员可以查看单元测试以获得对单元API的基本了解。
- 单元测试允许程序员在以后重构代码,并确保模块仍能正常工作(即回归测试)。该过程是为所有函数和方法编写测试用例,以便每当更改导致错误时,都可以快速识别并修复它。
- 由于单元测试的模块化特性,我们可以测试项目的各个部分,而无需等待其他人完成。
单元测试限制
- 不能期望单元测试能够捕获程序中的每个错误。即使在最琐碎的程序中也无法评估所有执行路径
- 单元测试本质上侧重于一个代码单元。因此,它无法捕获集成错误或广泛的系统级错误。
建议将单元测试与其他测试活动结合使用。
单元测试技术
- 结构技术
- 功能测试技术
- 基于错误的技术
单元测试最佳实践
- 单元测试用例应该是独立的。如果任何增强或要求变更,单位测试用例不应受到影响。
- 一次只测试一个代码。
- 遵循明确一致的单元测试命名约定
- 如果任何模块中的代码发生变化,请确保模块有相应的单元测试用例,并且模块在更改实现之前通过测试
- 在进行SDLC的下一阶段之前,必须先修复单元测试期间发现的错误
- 采用“测试为您的代码”方法。在没有测试的情况下编写的代码越多,检查错误的路径就越多。
概要
如您所见,单元测试可能涉及很多。它可能很复杂或相当简单,具体取决于所测试的应用程序以及所使用的测试策略,工具和理念。在某种程度上总是需要进行单元测试。这是肯定的。



浙公网安备 33010602011771号