我想创建一个存根以防止time.sleep(..)休眠以改善单元测试执行时间。
我所拥有的是:
import time as orgtime
class time(orgtime):
'''Stub for time.'''
_sleep_speed_factor = 1.0
@staticmethod
def _set_sleep_speed_factor(sleep_speed_factor):
'''Sets sleep speed.'''
time._sleep_speed_factor = sleep_speed_factor
@staticmethod
def sleep(duration):
'''Sleeps or not.'''
print duration * time._sleep_speed_factor
super.sleep(duration * time._sleep_speed_factor)
但是,在上面的第二行代码(类定义)中,我得到了以下错误:
TypeError: Error when calling the metaclass bases
module.__init__() takes at most 2 arguments (3 given).
如何修复这个错误?
发布于 2014-04-03 21:35:34
您可以在测试中使用mock库。
import time
from mock import patch
class MyTestCase(...):
@patch('time.sleep', return_value=None)
def my_test(self, patched_time_sleep):
time.sleep(666) # Should be instant
发布于 2018-06-19 08:37:26
接受的答案仍然有效。然而,从Python3.3开始,unittest.mock就成为了Python标准库的正式组成部分。
import time
from unittest import TestCase
from unittest.mock import patch
class TestMyCase(TestCase):
@patch('time.sleep', return_value=None)
def test_my_method(self, patched_time_sleep):
time.sleep(60) # Should be instant
# the mock should only be called once
self.assertEqual(1, patched_time_sleep.call_count)
# or
patched_time_sleep.assert_called_once()
# alternative version using a context manager
def test_my_method_alternative(self):
with patch('time.sleep', return_value=None) as patched_time_sleep:
time.sleep(60) # Should be instant
# the mock should only be called once
self.assertEqual(1, patched_time_sleep.call_count)
# or
patched_time_sleep.assert_called_once()
发布于 2019-02-22 22:46:22
我正在使用pytest,并使用以下fixture来修补time.sleep
import pytest
@pytest.fixture
def sleepless(monkeypatch):
def sleep(seconds):
pass
monkeypatch.setattr(time, 'sleep', sleep)
然后在我需要“加速”睡眠的测试中,我只需要使用这个fixture:
import time
def test_sleep(sleepless):
time.sleep(60)
因此,当您运行此测试时,您将看到它在更短的时间内完成:
= 1 passed in 0.02 seconds =
https://stackoverflow.com/questions/22836874
复制相似问题