我使用mock==1.0.1和pythonversion2.7.3,并使用twisted trial来运行测试。Twisted版本:13.2.0
我正在用inlineCallbacks decorator为函数编写一个模拟测试。 该函数使用time模块中的time(),我希望对此进行模拟,因为函数的返回值取决于返回的时间。我想断言返回值。在
所以,我添加了一个@patch decorator,但是模拟测试没有被执行(没有出现在执行的测试列表中)。这是密码-
CURRENT_TIME = time.time()
@patch('my_module.time')
@defer.inlineCallbacks
def test_index(self, mock_time):
mock_time.time.return_value = CURRENT_TIME
handler = ClassToTest()
result = yield handler.toTestFunc("")
assertEqual(result, {"time":CURRENT_TIME, "values":4})
我的问题是trial test.py
运行测试会运行除test\u index之外的所有其他测试。在注释掉补丁装饰器时,测试运行并给出一个错误。我读了Where to patch部分,但仍然不知道如何修补时间。时间()功能。我该如何模仿时间。时间()测试功能
不是模仿,而是参数化。在
Monkey-patching globals与参数化是一回事,只是做得不太好。您不需要在整个流程(甚至一个模块中的所有代码)中替换时间模块。你只需要为被测单元更换它。最直接的方法是将其作为参数传递。在
你可能还想做一些其他的事情。无论使用mocking和monkey-patching还是参数,这都适用。在
你想测试代码在你还没搞定它的时候能不能正常工作。毕竟,这就是它在生产中的运行方式,在那里您实际上希望它能够工作。在
^{pr2}$因为您使用的是Twisted,所以您可能还想知道
IReactorTime.seconds
API和twisted.internet.task.Clock
伪API。在在这种情况下,我没有费心提供一个默认的反应堆。你可以,但是显式地通过反应堆是一个很好的主意,所以我通常不提供违约。在
相关问题 更多 >
编程相关推荐