您的位置:软件测试 > 开源软件测试 > 开源单元测试工具 > junit
翻译JRUnit的文档
作者:网络转载 发布时间:[ 2013/1/25 15:34:30 ] 推荐标签:

近开始接触JBOSS IDE,想借此学习J2EE,在查资料时,偶尔接触到jboss社区的一个开源项目——JRUnit,是Junit的一个扩展,貌似功能还挺强大的。百度一下,发现相关资料少之又少,遂冒出翻译他的官方文档的念头,起码也是对开源的一丁点贡献,还能练练E文
首先给出这份官方资料的URL,是一个入门指南
http://labs.jboss.com/jrunit/downloads/jboss-jrunit.pdf
第一次翻译,加上我以前也没接触过JRUnit,肯定会有不少错误,希望大家谅解指正,为了方便叙述很多地方不是完全按原文翻译,好还是看官方的原文。我不确定的地方会加以注明并附上原文
OK,Let's get starting

原文共四章,很短总共十六页
第一章   《概述,什么是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)并实时查看;或者也可以记录一段时间内的数据,来看看一段时期内随着代码的变更,性能是如何受到影响的。

第一章翻译完了,区区一页纸搞了半天,看来翻译比起自己看懂要难多了。水平粗糙各位见谅

C/S测试
       首先要解决的是服务器端测试的生命周期问题,因为它需要从junit生命周期管理的默认行为中分离出来(单独讨论)
       首先需要有一种方法来通知服务器端启动和初始化,可以用setup方法做到。一旦这个方法返回,也可以假设服务器已经作好接收调用的准备了。其次,需要告之服务器进行关闭和清理回收资源,可以用tearDown方法来实现,只有在所有客户端都已经完成对服务器端的调用时,才能使用tearDown方法
       通过继承org.jboss.jrunit.ServerTestCase类而不是以往的junit.framework.TestCase类,可以实现上述行为。这个ServerTestCase类实际上继承自TestCase类,不过重写了其中一些方法来实现所需功能
       正如在junit测试过程中一样,server的实现还需要有一个test方法,用于在setUp后调用。test方法中含有assert(断言),用于验证服务器端数据和metrics(度量?)
       这里有几个重点....服务器的test case只能有一个test方法,这是因为junit每运行一个test方法,会新建一个测试实例来专门运行这个test方法,因此如果有多个test方法,会有多个服务器test case的实例。如果非要改变这一机制,得对junit本身进行相当大的改动,所以请你只使用一个test方法(或者你也可以自己去修改junit)
       还有很重要的一点是,tearDown方法可能会在某个方法还在运行期间被调用了。你可以故意这么做,让一个test方法一直循环直到tearDown被调用为止。举个例子,可以像这样:
...
public void testServerMetrics()
{
    while(!stop)
    {
    // collect data here
    }
}
protected void tearDown()
{
   stop = true;
   // so will cause testServerMetrics() to break out of loop
   // do shutdown and clean up code.
}
...

    对于客户端test case来说,jrunit没有什么特别的要求,只要继承了junit.framework.TestCase类,确保满足了junit test case的要求可以了。(译注:是和以前用junit一样)

上一页12下一页
软件测试工具 | 联系我们 | 投诉建议 | 诚聘英才 | 申请使用列表 | 网站地图
沪ICP备07036474 2003-2017 版权所有 上海泽众软件科技有限公司 Shanghai ZeZhong Software Co.,Ltd