我有一个测试函数,最终会调用另一个函数,里面有一些time.sleep函数。我不想让我的考试睡觉。所以,我的问题是,最好是模拟测试函数,还是将函数调用函数来测试补丁?
示例1
@patch('time.sleep')
def test_some_function(mock_time):
data = some_sleepy_function()
assert data == expected_data
示例2:
def test_some_function():
@patch('time.sleep')
def run_function(mock_sleep):
return some_sleepy_function()
assert run_function() == expected_data
答案 0 :(得分:3)
要模仿像time.sleep
之类的简单内容,我会使用py.test' s monkeypatch
:
def test_some_function(monkeypatch):
monkeypatch.setattr(time, 'sleep', lambda s: None)
data = some_sleepy_function()
assert data == expected_data
如果您要在课堂上对测试进行分组:
class Test:
def test_some_function(self, monkeypatch):
monkeypatch.setattr(time, 'sleep', lambda s: None)
data = some_sleepy_function()
assert data == expected_data
请注意,这仅适用于"标准" pytest类(不是unittest.TestCase
子类)。
在我看来,将mock.patch
作为装饰器与pytest一起使用令人困惑,因为py.test的灯具作为参数传递给测试函数。