用mock-tim单元测试周期协程

2024-06-01 13:02:51 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用Tornado作为一个周期性进程的协程引擎,其中重复的协程在每次执行结束时对自身调用ioloop.call_later()。我现在试着用单元测试来驱动它(使用Tornado的发电机试验)我用一个局部变量t来模拟ioloop的时间: DUT.ioloop.time = mock.Mock(side_effect= lambda: t) (DUT<;==>;被测设备) 然后在测试中,我手动增加t和yield gen.moment来启动ioloop。这个想法是在不同的时间间隔后触发重复的协同过程,这样我就可以验证它的行为。 但是协程并不总是触发——或者它在完成执行之前返回到测试代码,从而导致失败。 我认为应该使用stop()wait()来同步测试代码,但在这种情况下我看不到具体的使用方法。如果DUT在自己的ioloop中运行,那么整个测试策略是如何工作的呢?你知道吗


Tags: 引擎time进程时间单元测试calltornado发电机
1条回答
网友
1楼 · 发布于 2024-06-01 13:02:51

一般来说,使用yield gen.moment来触发特定事件是不确定的;不能保证您必须等待多少“时刻”,或者触发的事件以什么顺序发生。最好确保被测试的函数有一些可以异步等待的效果(如果它自然没有这种效果,可以使用tornado.locks.Condition)。你知道吗

修补IOLoop.time还有一些微妙之处。我认为它可以与默认的Tornado IOLoops一起工作(如果不使用mock:在构建循环时传递time_func参数是可能的),但是在使用例如AsyncIOLoop时,它不会达到预期的效果。你知道吗

我认为您不想使用AsyncTestCase.stop.wait,但不清楚您的测试是如何设置的。你知道吗

相关问题 更多 >