用于测试目的的同步模式干扰器

时间:2015-09-01 07:33:24

标签: java disruptor-pattern

为了对包含破坏程序的一些代码进行单元测试,我需要确保在主测试线程继续之前处理发布到破坏程序的事件(显然,我没有测试破坏程序代码)。

在没有更优雅的解决方案的情况下,我克服了以下问题:

...
ringBuffer.publish(sequence);
while (ringBuffer.getBufferSize() > ringBuffer.remainingCapacity()) {
    Thread.yield();
}

但是,我想知道是否有某种方法可以将干扰器设置为“同步模式”(我看起来却找不到),或者可以使用的“同步模拟干扰器”实现可以确保在publish()处理所有事件之前,线程不会从onEvent()返回?

1 个答案:

答案 0 :(得分:1)

破坏者没有同步模式。

有多种方法可以捏造一个:

  • 例如阻止发布者在事件处理程序倒计时的CountDownLatch上。
  • 另一种方法是使用相同的线程执行程序,例如来自jmock的线程执行程序,以便破坏程序安排事件处理程序。因此,您可以控制事件处理程序处理事件的时间。

然而,对我来说,感觉更像是集成测试而不是单元测试。为什么发布者需要“知道”消费者已经消费了该事件?