在测试中嘲笑睡觉

时间:2015-03-17 19:20:06

标签: python-2.7 mocking patch pytest

我有一个测试函数,最终会调用另一个函数,里面有一些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

1 个答案:

答案 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的灯具作为参数传递给测试函数。