导入模块的Python测试和模拟

导入模块的Python测试和模拟,python,python-3.x,python-2.7,pytest,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 cl

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

#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()
现在我想像这样测试这个文件:

#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()
这部分工作得很好,符合我的要求。 但是 这将影响其他测试文件。。。 我的意思是,我还有其他使用“url.fetch”的测试 而现在不是得到正确的流量 他们得到了上述嘲笑的回应

有什么想法吗

  • 很确定这没有关系,但我正在使用
    pytest
    运行我的测试
在上下文中使用,以定义模拟的
获取应使用的范围。在下面的示例中,在带
块外,
URL。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

4天前你在哪里。。。谢谢很抱歉,但很高兴听到这对你有帮助!Hey@hoefling如何在测试文件中模拟导入的模块。“from.modifiers导入修饰符”。补丁看起来不错你想模拟模块吗?还是要模拟实际从中导入的内容(
Modifiers
class)?检查一下进口材料的模拟可能性。