2

我在twisted 中实现pubsub 模式。并且想知道如何在试验中测试 pub 只触发正确的潜艇,而不是其他人。

我可以测试是否调用了正确的潜艇:

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)

更新。我想出的唯一想法:

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)
4

1 回答 1

1

你不应该在这个测试中使用“真正的”反应器。Trial 中的“超时”功能并非旨在对测试行为做出断言,而是允许退出挂起或错误的测试,以便套件的其余部分可以继续。相反,请遵循记录在案的指南,以测试 Twisted 中的定时调用调度

于 2013-11-06T20:21:47.237 回答