1

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

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

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

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

4

1 回答 1

1

干扰器没有同步模式。

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

  • 例如在事件处理程序倒计时的CountDownLatch上阻止发布者。
  • 另一种选择是使用相同的线程执行器,例如jmock中的这个,让中断器安排事件处理程序。因此,您可以控制事件何时由事件处理程序处理。

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

于 2015-09-03T01:01:10.647 回答