前面讲了这么多,本小节我们将结合一个实例进行说明。我所选择的是junit,一个很著名的单元测试工具,选择它作为例子主要有两个原因:其一是junit相对比较简单,这样我可以集中于要论述的主题;其二是junit中大量使用了模式,这样大家可以对于上面的论述有一个感性的认识。下面对于junit的说明会比较粗略,读者可以到www.junit.org去了解有关junit的更加详细的信息。
junit是一个单元测试工具,所以它就要满足使用者对于单元测试工具的需求。让我们一一来进行说明,首先测试用例的书写必须要容易,只有这样大家才可能会使用该测试工具。要迎合这一点,我们可以通过把测试用例表示为对象的方式来完成,对象的概念和人思维中的概念最为贴近,表示起来也最为自然。command非常符合我们的要求,看看它的意图:将一个请求封装成一个对象,从而对请求进行排队或者记录日志…。另外,测试工具要为使用者做它能够做的最多的事情,尽量减少使用者的工作量,我们必须对测试的一般流程进行分析,归纳出一个模板流程,这样就可以使使用者仅仅关注自己所需要的具体步骤而不用考虑如何去组织这些步骤(一般的测试都分为测试准备即setup,运行测试即runtest以及结束清除即teardown阶段),template method模式正好能够帮上忙。另外,测试工具应该能够统一处理单独的用例以及多个用例的组合,这样也可以大大减少使用者的工作量,是不是马上就想到了composite模式,不错,就是它。
下面根据上面的论述,在我们所得出的模式场景的指导下,给出junit系统架构的uml图表示:
junit本身提供了源代码,有兴趣的读者朋友可以参阅。不过如果了解了系统的架构后在去看源代码的话,相信会有不同的感受。