导入模块的Python测试和模拟

标签 python python-3.x python-2.7 pytest

我有一个模块导入另一个模块,如下所示:

#main-file.py
import src.FetchFunction.video_service.fields.urls as urls

def some_func():
  return urls.fetch()

现在我想像这样测试这个文件:

import unittest
import src.FetchFunction.video_service.fields.urls as urls
from unittest.mock import MagicMock

class MainFileTest(unittest.TestCase):

    def test_example(self):
      urls.fetch = MagicMock(return_value='mocked_resp')
      assertSomething()

这部分效果很好并且达到了我想要的效果。 但 这会影响其他测试文件... 我的意思是我还有其他使用“urls.fetch”的测试 现在而不是获得适当的流量 他们得到了上述 mock 的回应。

有什么想法吗?

  • 非常确定它不相关,但我使用 pytest 来运行我的测试

最佳答案

使用patch在上下文中定义应该使用模拟的 fetch 的范围。在下面的示例中,在 with block 之外,urls.fetch 将恢复为原始值:

import unittest
from unittest.mock import patch

class MainFileTest(unittest.TestCase):

    def test_example(self):
        with patch('urls.fetch', return_value='mocked_resp'):
            # urls.fetch is mocked now
            assertSomething()
        # urls.fetch is not mocked anymore

关于导入模块的Python测试和模拟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49914521/

相关文章:

python - 元组列表列表中的最大值

python-3.x - 如何在终端或任何其他方式中使用 'su -l' 在 OpenWrt 中的用户之间切换?

python - 为什么Flood Fill算法超出了Leetcode最大递归限制?

Python UDP客户端没有响应

python - 没有内存分配的 numpy tile

Python Selenium 将数据存储到 CSV 中的特定列?

python - 模块 'cv2' 没有属性 'createThinPlateSplineShapeTransformer'

python - 隐藏/保护 Python 代码

python - 为什么在这种情况下要追加 list.extend ?

python - 可空列的 Django REST ViewSet 排序