unittest, mock time.sleep 在其他包中

unittest, mock time.sleep in other package

我有一个 Pycharm 项目,其中包含一些正在测试的包代码,我可以从项目中的另一个模块导入 import my_package 之类的包,因为 Pycharm 配置 python将 projectdir 包含到它的搜索路径中。 my_package 中的 my_module 导入 time 并使用 time.sleep,我想模拟它。

projectdir/my_package
  __init__.py
  my_module.py

projectdir/tests
  test_my_package.py

在测试中我有以下代码:

import unittest
from unittest.mock import patch

from my_package import my_module


@patch("my_package.my_module.time.sleep")
class TestMyPackage(unittest.TestCase):
    def test_bla(self, timepatch):
        my_module.my_function()

我遇到的问题是,time.sleep 没有被模拟出来。我的单元测试每个测试用例需要大约 0.5 秒,这我太多了。我想我在错误的地方打补丁。 你能帮我修复 @patch("my_package.my_module.time.sleep") 装饰器吗?

通过试验我找到了答案。我不得不使用

sleeppatch = patch("my_package.my_module.time.sleep")
sleeppatch.start()

在测试类的setUp方法中 和:

sleeppatch.stop()

tearDown 方法中。

正在使用装修,补丁停的太早了