【Jsp精品源码栏目提醒】:网学会员为广大网友收集整理了,什么是单元测试 - 信息管理,希望对大家有所帮助!
1/8 Jtest??介绍 什么是单元测试 单元测试的定义是测试应用中最小的单元单元测试被公认为软件开发过程中的一个关键步骤。
单元测试能够简化错误检测在减少开发时间和成本的同时提高软件质量。
为什么需要单元测试 一、 单元测试能帮助客户更准更全面地找到错误显著提高软件质量 上图显示了一个包含许多对象的应用程序的测试模型大椭圆表示应用程序小椭圆表示对象箭头表示用户输入红星表示潜在的错误。
在集成测试中为了发现错误我们希望通过不断修改输入引发对象间的相互作用使得某对象引发潜在的错误但这无疑是有难度的。
由于其难度开发人员只能依赖应用软件的运行失败来发现错误这样不仅很难找到错误发生的准确位置而且实际上还有大量的类没有得到测试。
单元级测试提供了一种更有效的发现错误的方法它将应用程序中的最小单元分离开使得测试更接近错误只要简单地对每个最小单元进行独立测试就很容易地使全面准确地找到所有的程序错误成为可能。
二、 单元测试能够在改善软件质量的同时大量削减开发时间和成本 由于在较高的层次上修改一个类可能会改变多个程序部件的设计和功能性因此越迟发现问题通常就要修改越多的代码。
当修改的代码量增加时其他两个因素也会随之增加 修改每一个错误所需的时间和费用 在代码中引入新的错误的机会 一次又一次的研究证明随着问题被检测出来的时间的推迟发现软件错误所需的时间和成本会惊人地增加。
而单元测试由于能够更容易地找到错误就会减少发现它们的时间和资源。
其次由于你每完一个类就能发现和改正其中的错误你就不需要在以后花费大量时间重新了解和摸索。
最后最重要的理由是由于类的相互作用和关联性在单元级修改一个类只会影响到原始的类避免了各个单元间的相互作用引发新的错误。
因此单元测试能保证大大削减开发的时间和成本。
2/8 什么是单元测试的难点 基于上述信息单元测试看上去就象一剂万能药 如果是这样的话为什么每一个JAVA开发人员不马上对每一个类进行单元测试就目前可以使用的技术来说对JAVA的单元测试是一件困难、烦琐和耗时的事情没有很好的工具来自动化这一过程使得许多JAVA开发人员望而生畏。
执行单元测试的第一步是是目标类变得可测。
这需要两个工作 设计一个运行目标类的测试驱动程序 设计桩函数它们为被测类所引用的任何外部资源返回值 建立一个测试驱动需要建立一个新的类除了测试原始类以外它不能用于任何其它目的。
测试驱动应该具有下列特性 一个指定设置和清除的标准方式 一个选择个别测试和所有有效测试的方法 一个分析输出的预期或非预期结果的机制 一个标准的错误报告形式 为了充分而正确地测试类你需要设计一个能够完全检查被测类的测试驱动若干次修改和重写这样一个测试驱动是免不了的。
一旦建立了测试驱动你必须仔细检查它不能包含任何错误。
测试驱动中的一个错误会破坏这个测试但是你无法单独测试一个类你也不能测试测试驱动本身。
如果你的类引用任何还没有准备好或不可访问的外部资源如外部文件、数据库等你必须建立相应的桩函数它们的返回值类似于这些实际的外部资源应该返回的。
当建立这些桩函数时你需要选择桩函数的返回值它们将影响程序的执行路径 为了测试类的功能性必须执行任何的路径 足够的路径能够提供彻底的测试覆盖性 下一步是设计和建立合适的测试用例。
为了彻底地测试类的结构和功能性你应该设计两种类型的 测试用例黑盒和白盒。
黑盒测试 黑盒测试用例基于说明和规格文档。
特别地至少应该为规格文档的每个入口建立一个测试用例更好的是这些测试用例能够测试每个入口的各种边界条件还需要为发现的每一个错误增加另外的测试用例以及任何你认为必要的其它测试。
白盒测试 为了建立有效的白盒测试用例你必须研究类的内部结构然后编写测试用例尽可能完全地覆盖类的所有方法以及覆盖所有可能引起类崩溃的输入。
要达到较高的测试覆盖性需要有效的白盒测试用例并且要求它们能够执行相当多的路径。
例如一个典型的万行的程序