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" 的测试
现在不是获得正确的流程
他们得到了上述嘲笑的回应。
有什么想法吗?
- 很确定它不相关,但我使用
pytest
来 运行 我的测试
在上下文中使用 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
我有一个像这样导入另一个模块的模块:
#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" 的测试 现在不是获得正确的流程 他们得到了上述嘲笑的回应。
有什么想法吗?
- 很确定它不相关,但我使用
pytest
来 运行 我的测试
在上下文中使用 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