第五章:Testing Modules

文章目录

  • State and Programs
  • Testability of State-Based Programs
    • intrusively test 侵入性测试
      • Non-intrusive test 非侵入测试
      • java和其他工具的实践
  • 有限状态机进行单元测试(Unit testing with FSA)
    • 构建状态机步骤
      • step1:识别 FSA 状态
      • step2:确定某个状态下的可用操作
      • step3:确定 source state 和 target states
      • 一个构建 FSA 的实例
      • 通过 FSA 构建 test case
    • Intrusively Testing the State Transition Diagram (侵入性测试状态转换图)
    • Non-intrusive Testing the State Transition Diagram (非侵入性测试状态转换图)
      • Problems with State Based Testing
  • 测试面向对象程序
    • 面向对象语言特点
      • Classes and Objects
      • 继承 Inheritance
      • 多态 Polymorphism
    • 测试继承和多态
      • Building and Testing Inheritance Hierarchies (构建和测试继承层次结构)
      • Implications of Polymorphism

  • 目的是测试模块而非单个 function

State and Programs

  • Data = State.
  • State is accessed & manipulated via specific operations. 通过特定操作访问和操作状态。
  • Collections of these operations = Module. 这些操作集合 = 模块。
  • Benefits:
    • Separation of interface and implementation. 接口和实现分离。
    • Treats operations as a black box. 将操作视为黑盒子。
    • Data details concealed; changes to data don’t affect users if the interface remains consistent. 数据细节隐藏;如果接口保持一致,则对数据进行更改不会影响用户。

Testability of State-Based Programs

  • testability 取决于 可控性可观察性
    在这里插入图片描述

  • 例如,考虑一个允许操作和访问堆栈的模块。该类的操作允许我们将元素推入堆栈查看堆栈顶部弹出堆栈顶部的元素,并检查堆栈是否为空
    第五章:Testing Modules_第1张图片
    第五章:Testing Modules_第2张图片

  • 按照之前的知识,如果我们要测试一个 funciton 或者模块,我们根据其输入的参数设计等价类,并选用合适的 test case,然后我们可以根据预期的输出来观察 funciton 运行的结果。

  • 但是这个堆栈并非如此;push操作不需要堆栈参数,这意味着无法通过其接口控制push操作。此外,一旦将元素推入堆栈,我们无法直接观察到堆栈的值。 因此,作为堆栈模块的操作不容易被控制或观察到。

  • 所以,不能孤立地测试 push 这个操作,要测试 push 这个 fun

你可能感兴趣的:(testing)