原文共四章,很短总共就十六页
第一章 《概述,什么是JRUnit》
jrunit通过向基于junit的测试框架加入对基准(benchmark)的支持,以及对junit框架本身的扩展,从而为基于分布式的客户端/服务器模式的(client/server)测试提供支持。需要强调的是,jrunit不是用来替代junit的,而是对junit的一个扩展,使其对企业应用方面有更好的支持。
说到基于C/S的测试,junit本身有着不少明显的局限性,使它在这方面不是很好用。一个最显著的地方是,junit被设计成所有的test都在一个单独的类、一个单独的进程内运行。另一个局限是,所有的测试都是原子的、与任何外围代码都没有关系,因此每个测试的生命周期都是相互独立的。这些特征对于低级别的代码单元很好用,但换上C/S模式的测试时则不尽然。
由于C/S架构代码的特殊性,它们对于测试有着额外的要求。首先是对客户端和服务器端测试的生命周期,或者说状态,必须能进行管理。这一点很重要,因为在客户端进行测试并且连接服务器之前,服务器必须已经创建并初始化完毕;同样服务器不能在客户端完成所有测试之前关闭。此外还必须能够将服务器和客户端的所有测试结果整合成为一份单一的结果格式。最后,所有这些都能够从单点驱动,这样就能够在一次构建中,把它们包含进自动化测试中去。(Finally, need to be able to have all this driven fromasinglepointsocanbeincludedwithinanautomatedtestrunfromabuild.)
jrunit通过允许多个test case以及客户端和服务器,在多个不同的进程上同步运行但是由一个中央driver进行控制,来解决上述问题。这个driver控制所有test case的整个生命周期。所有由driver产生的test case都被放入一个harness中,由harness向driver汇报执行情况。而这个driver本身就是一个TestCase类,所以可以直接从IDE或者JUNIT中调用。
jrunit还提供额外的benchmark插入(hook)到测试代码中。这些benchmark hook能让jrunit框架收集统计数据,即关于不同测试代码段运行所花费的时间的统计。这些数据可以被记录在许多持久性存储中(a number of persistent store)并实时查看;或者也可以记录一段时间内的数据,来看看一段时期内随着代码的变更,性能是如何受到影响的。