当前位置:嗨网首页>书籍在线阅读

36-结果分析

  
选择背景色: 黄橙 洋红 淡粉 水蓝 草绿 白色 选择字体: 宋体 黑体 微软雅黑 楷体 选择字体大小: 恢复默认

结果分析

在本节中,我们利用 MultithreadedTC 库测试了 LinkedTransferQueue 类,而其他应用同样可以使用 MultithreadedTC 库及其节拍器进行测试。本案例实现了一个经典的生产者/消费者模型,其中包含两个消费者和一个生产者,并测试了以下情形:第一个 String 型对象进入队列后被到达缓冲区的第一个消费者消费了,而第二个 String 型对象进入队列后被到达缓冲区的第二个消费者消费了。

对开发者来说,我们通常使用JUnit库测试Java应用,而 MultithreadedTC 正是一款基于JUnit的库。为了使用 MultithreadedTC 库进行测试,开发者需要继承 Multithreaded TestCase 类。 MultithreadedTestCase 是一个继承 junit.framework.AssertJUnit 的类,同时它也包含了所有校验测试结果的方法,不过由于 MultithreadedTC 并没有继承 junit.framework.TestCase 类,因此你并不能把 MultithreadedTC 和其他的JUnit测试集成在一起。

可以根据需求实现以下方法。

  • initialize() :此方法的实现是可选的。它是在开始测试时执行的,因此,你可以使用它初始化使用测试的对象。
  • finish() :此方法的实现是可选的。它是在结束测试时执行的,因此,可以用它关闭或者释放占用的资源,或者校验测试结果。
  • 构成测试的方法集:这些方法集构成了测试过程的全部逻辑,这些方法名都以 thread 关键词开始,后面包含任意字符串,如 thread1()

为了控制线程的执行顺序,需要使用 waitForTick() 方法,此方法接收一个整数值作为参数,并使执行该方法的线程休眠,直到测试过程中运行的所有线程都阻塞。在所有线程都阻塞以后, MultithreadedTC 将会恢复这些由 waitForTick() 阻塞的线程。

作为 waitForTick() 方法的参数传递的整数将用于控制执行顺序。在 MultithreadedTC 的节拍器内部包含一个计数器。当所有线程都阻塞后, MultithreadedTC 将计数值递增到 waitForTick() 方法指定的下一个数字。

在内部,当 MultithreadedTC 库开始执行测试时,首先执行的是 initialize() 方法,然后根据 thread 关键词开始的方法,分别创建对应的测试线程(在本案例中分别对应 thread1()thread2()thread3() )。在所有的测试线程都完成执行后,调用 finish() 方法。最后开发者需要通过 TestFramework 类的 runOnce() 开始执行本次测试。