在twisted.trial中,如何测试是否在超时内调用回调?

在twisted.trial中,如何测试是否在超时内调用回调?,twisted,Twisted,我正在twisted中实现pubsub模式。 想知道如何在试验中测试pub只触发适当的sub,而不触发其他sub 我可以测试是否调用了适当的SUB: def test_pubsub(self): d1 = defer.Deferred() d2 = defer.Deferred() self.bus.sub("/foo", lambda ev: d1.callback(ev)) self.bus.sub("/foo/bar", lambda ev: d2.callback(ev)

我正在twisted中实现pubsub模式。 想知道如何在试验中测试pub只触发适当的sub,而不触发其他sub

我可以测试是否调用了适当的SUB:

def test_pubsub(self):
  d1 = defer.Deferred()
  d2 = defer.Deferred()
  self.bus.sub("/foo", lambda ev: d1.callback(ev))
  self.bus.sub("/foo/bar", lambda ev: d2.callback(ev))
  self.bus.pub("/foo/bar", {})
  return defer.gatherResults([d1, d2])
test_pubsub.timeout = 2    
现在我想测试一下

self.bus.sub("/foo/bar/baz", callback_will_not_be_called)
Upd。我唯一想到的是:

self.bus.sub('/foo/bar/baz', lambda ev: d4.callback(ev))
d4.addCallback(lambda e: self.fail("should not happen"))
reactor.callLater(1.9, lambda: d4.cancel())
self.assertFailure(d4, defer.CancelledError)

您不应该使用“真实”反应堆进行此测试。试用版中的“超时”功能不是为了对测试的行为做出断言,而是为了允许挂起或有问题的测试退出,以便套件的其余部分可以继续。相反,请遵循记录在案的指南。

Ok。我可以使用twisted.internet.task.Clock检查超时时间内是否发生了某些事情。但是如何检查某些事情没有发生?请调用
clock.advance(…)
。然后,紧接着,在测试中同步地,断言事情没有发生。如果您不运行reactor,而只是在内存中创建被测组件的表示(如reactor在
时钟上的
callLater
实现),那么您不需要让任何实际时间过去,只要告诉您的代码时间已经通过
advance