文章目录
- 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 取决于 可控性 和 可观察性
-
例如,考虑一个允许操作和访问堆栈的模块。该类的操作允许我们将元素推入堆栈,查看堆栈顶部,弹出堆栈顶部的元素,并检查堆栈是否为空。
-
按照之前的知识,如果我们要测试一个 funciton 或者模块,我们根据其输入的参数设计等价类,并选用合适的 test case,然后我们可以根据预期的输出来观察 funciton 运行的结果。
-
但是这个堆栈并非如此;push操作不需要堆栈参数,这意味着无法通过其接口控制push操作。此外,一旦将元素推入堆栈,我们无法直接观察到堆栈的值。 因此,作为堆栈模块的操作不容易被控制或观察到。
-
所以,不能孤立地测试 push 这个操作,要测试 push 这个 fun