Python 导入模块的测试和模拟

Python test and mock for imported module

我有一个像这样导入另一个模块的模块:

#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" 的测试 现在不是获得正确的流程 他们得到了上述嘲笑的回应。

有什么想法吗?

在上下文中使用 patch 来定义应使用模拟 fetch 的范围。在下面的示例中,在 with 块之外,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