组合模式判断

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

组合模式判定依据

JUnit项目中的Composite(组合模式)又叫做部分-整体模式,定义如下图:

ponent是组合中的对象声明接口,在适当的情况下,实现所有类共有接口的默认行为。声明一个接口用于访问和管理Component子部件。

2.Leaf 在组合中表示叶子结点对象,叶子结点没有子结点。

posite 定义有枝节点行为,用来存储子部件,在Component接口中实现与子部件有关操作,如增加(add)和删除 (remove)等。

在EA工具下,我们解析出JUnit源代码的类图,根据类图我们发现了10中设计模式类图,3种设计模式实例是对的,是因为前人做过相同的实验得出了这三组设计模式实例,所以直接将其作为对的处理(即别人实验中说明的是对的实例的不一定我们都有)。

根据了解正确的组合模式,我们来发现错误的组合模式的语义上的差异来判定错误的组合设计模式:

Test:是一个接口类,它提供了测试用例统一的运行接口和信息收集接口,规范了测试用例必须具备的基础方法。

TestCase:是一个抽象类,实现了Test接口,并在该基础上为不同的测试提供了

统一的测试环境操作接口,定义了测试对象原型。

TestSuit:是Test的容器,可以包含一系列不同种类的Test,使得客户端不用关心Test是简单类型或者是复杂类型,提供了统一的操作方式,采用递归的方式进行操作。

在上述三个类中,体现出了简单到复杂的关系结构,TestCase代表单个测试用例所具有的信息,并提供了统一的操作方式,是一个叶子组件,TestSuite中对TestCase进行包装,可以包含多种类型的TestCase,并采用递归调用的方式进行操作运行测试用例,这种复杂关系简单化的设计,使得客户端不用关心Test是简单类型或者是复杂类型,提供了统一的操作方式,体现出了组合模式的设计思想。

Test:是一个接口类,它提供了测试用例统一的运行接口和信息收集接口,规范了测试用例必须具备的基础方法。

ActiveTestSuite:是TestSuite的子类,对容器中的Test进行活性测试,各个Test 运行于单独的线程中,运行Test的线程会处于阻塞状态直到容器中的Test都运行结束。

TestSuitePanel:一个显示类,用于构建TestSuite的UI界面,将TestSuite中的Test转换成树形结构进行展示。

在上述三个类中,TestSuiePanel中的TestTreeModel属性对TestSuite进行包装,使得TestSuitePanel能够包含多种TestSuite对象,并且提供了统一的访问操作接口,规范了对TestSuite的操作方式,TestSuite作为TestSuitePanel中的部分存在,两者在内容上有关联关系,体现出了组合设计模式中的整体与部分的关系,符合组合设计模式思想。

TestRunContext :是一个接口类,定义了访问Test 运行上下文环境,Test 显示类需要访问该接口进行上下文环境访问,而不是直接访问TestRunner 类,这样做可以保护数据安全。

TestHierarchyRunView :是一个显示类,提供了一种分层次的显示功能,将多个Test 以树形结构进行显示。

FailureRunView :是一个显示类,保存了运行失败的Test 的信息,以列表的形式进行展示。

上述三个类中,FailureRunView 保存了运行失败的

Test 的信息,而在TestHierarchyRun-View 的TestSuitePanel 属性中保存了所有Test 的信息,并以层次形式进行信息展示,两者之间存在整体与部分的关系,符合组合设计模式的设计思想。

下面解释一下为什么另外7种不是。由于这10种设计模式都是满足形式化定义的组合模式,我们采用结合源代码的语义分析得出不是组合模式实例,即要准确的明白源代码中每个类的作用,看类与类之间在语义上是否满足部分和整体的关系。我们发现这7种找出的实例都不满足语义上的组合模式定义。

1、需要换过来

Test:是一个接口类,它提供了测试用例统一的运行接口和信息收集接口,规范了测试用例所具有的方法。

TestHierarchyRunView:是一个显示类,提供了一种分层次的显示功能,将多个Test以树形结构进行显示。

FailureRunView:是一个显示类,保存了运行失败的Test的信息,以列表的形式进行展示。

在上述三个类中,Test是测试用例运行接口,规范了参与测试对象的基础运行操作,TestHierarchyRunView和FailureRunView是测试用例信息显示类,用于显示测试用例开始和结束,以及运行信息,TestHierarchyRunView和FailureRunView 具有较强的内在联系,但与Test之间缺乏必要的承接关系,语义上不符合组合模式的设计思想。

2、

Test:是一个接口类,它提供了测试用例统一的运行接口和信息收集接口,规范了测试用例所具有的方法。

TestCase:是一个抽象类,实现了Test接口,并在该基础上为不同的测试提供了统一的测试环境操作接口,定义了测试对象原型。

TestDecorator:是Test的一个基础包装类,使用该类可以定义新的Test的包装类,在子类中可以添加多种行为(在执行测试之前或者之后)

在上述三个类中,TestCase定义了测试用例的基础方法和属性,TestDecorator对单个Test进行包装,以便实现不同的测试需求,三者之间没有体现出组合模式中的整体-部分或者是简单-复杂的关系,不符合组合模式的设计思想。

3、

Test:是一个接口类,它提供了测试用例统一的运行接口和信息收集接口,规范了测试用例所具有的方法。

TestFailure:测试信息收集类,用于收集测试类的失败信息,包括抛出的异常信息。

TestResult:测试结果类,用于收集测试用例的运行结果信息。这是一个收集参数模式的实例,这个测试框架区分failuer和error信息,一个failure信息是我们期望的信息,而error是我们不期望的信息。

在上述三个类中,TestResult用于收集测试用例的运行信息,而TestFailure用于收集测试用例的错误信息以及异常信息,在TestFailure内部和TestResult没有调用关系,不存在语义关联关系,所以不符合组合设计模式的设计思想。

4、

Test:是一个接口类,它提供了测试用例统一的运行接口和信息收集接口,规范了测试用例所具有的方法。

相关文档
最新文档