【发布时间】:2015-11-26 13:56:43
【问题描述】:
我使用 Tornado 作为周期性进程的协程引擎,其中重复的协程在每次执行结束时对自身调用 ioloop.call_later()。我现在正在尝试通过单元测试(使用 Tornado 的 gen.test)来驱动它,我用局部变量 t 模拟 ioloop 的时间:
DUT.ioloop.time = mock.Mock(side_effect= lambda: t)
(DUT 被测设备)
然后在测试中,我手动增加 t 和 yield gen.moment 来踢 ioloop。这个想法是在不同的时间间隔后触发重复的协程,以便我可以验证它的行为。
但是协程并不总是触发 - 或者它可能会在完成执行之前返回到测试代码,从而导致失败。
我认为应该使用stop() 和wait() 来同步测试代码,但我无法具体看到如何在这种情况下使用它们。如果 DUT 在自己的 ioloop 中运行,那么整个测试策略如何工作?
【问题讨论】:
标签: python unit-testing testing asynchronous tornado