静态模型与实例模型

很多使用者问到什么时候选择静态模型,什么时候选择实例模型。

Spec Explorer的基础解决方案向导(Visual Studio File菜单->New->Project->Visual C#->Spec Explorer Base Solution)在第二步对几种模型进行了简述,并让用户进行选择:

image_2[1]

所以在这里和大家探讨一下在什么情况下选择哪种模型。

大家可能还记得在之前的一篇博客中,我们讲到了两种连接测试用例与待测系统的方式:直接连接和适配器连接。如果你决定使用后者,那么适配器本身的设计决定了你选择静态模型还是实例模型。一个静态的适配器可以被用来控制一个基于实例的待测系统,反之亦然。考虑到测试适配器只是整个测试体系中的一个组件,所以这里进行选择的基本原理和设计任何一个面向对象的组件的基本原理是一致的。注意这里并不是一个是或者否的决定,静态和基于实例的Action可以共存于同一个适配器中。

Cord脚本中Action的声明被用于连接测试用例与待测系统或者适配器。总的来说,如果你的测试用例是调用待测系统或者适配器的静态方法,那么Action就应该是静态的;如果调用的是待测系统或者适配器的实例化方法,那么Action就是基于实例的。所以选择静态模型还是实例模型的决策权并不在建模者,而在于待测系统或者适配器的设计者。当然,两者可以是扮演不同角色的同一个人。

基于实例的Action意味着模型调用某一对象的方法,该对象不仅仅在模型探索阶段存在,在测试运行阶段也是存在的。所以该对象必须是之前某个步骤的输出,如果一个方法创建了一个没有返回的对象,那么显然这一对象不能在模型的后续步骤中被用到。

Spec Explorer允许把基于实例的Action与静态的模型方法进行对应(反过来亦可)。虽然一般来说不推荐这么做,因为基于实例的Action对应基于实例的模型方法,静态Action对应静态模型方法是很自然的设计,但是有时建模者不同意待测系统或适配器的设计,而希望用另一种模型设计。我们的目标是尽可能在满足需求的基础上让用户模型更为简单并更容易维护。