函数内部模拟函数
Mock function inside function
我正在尝试模拟一个使用 mocker 补丁进行 API 调用的函数。但是,它不起作用,即使在这个简单的示例中也是如此。 class_abcd.process_weather()
使用实际的 get_weather() 而不是模拟的
目录结构如下:
-source
-sub
-using_output.py
-weather_api.py
using_output.py
from source.weather_api import get_weather
class abcd():
def process_weather(self):
weather = get_weather()
return "processed " + weather
weather_api.py
def get_weather():
return "weather"
我正在尝试测试 process_weather 并根据天气 api 伪造 get_weather。
from pytest_mock import mocker
def test_weather_in_batch(mocker):
# Setup
fake_weather = "fake_weather"
# Actual
class_abcd = abcd()
mocker.patch('weather_api.get_weather', return_value=fake_weather)
actual = class_abcd.process_weather()
# Expected
expected = "processed " + "fake_weather"
# Asset
assert expected == actual
使用 mock 时,您需要指定要修补的导入,而不是底层 module/function。
from pytest_mock import mocker
def test_weather_in_batch(mocker):
# Setup
fake_weather = "fake_weather"
# Actual
class_abcd = abcd()
mocker.patch('source.sub.using_output.get_weather', return_value=fake_weather)
actual = class_abcd.process_weather()
# Expected
expected = "processed " + "fake_weather"
# Asset
assert expected == actual
在您的情况下,您正在将 get_weather
导入 using_output.py
。
因为你想在 using_output.py
中使用 get_weather
的模拟版本,这就是你需要修补的地方。
我正在尝试模拟一个使用 mocker 补丁进行 API 调用的函数。但是,它不起作用,即使在这个简单的示例中也是如此。 class_abcd.process_weather() 使用实际的 get_weather() 而不是模拟的
目录结构如下:
-source
-sub
-using_output.py
-weather_api.py
using_output.py
from source.weather_api import get_weather
class abcd():
def process_weather(self):
weather = get_weather()
return "processed " + weather
weather_api.py
def get_weather():
return "weather"
我正在尝试测试 process_weather 并根据天气 api 伪造 get_weather。
from pytest_mock import mocker
def test_weather_in_batch(mocker):
# Setup
fake_weather = "fake_weather"
# Actual
class_abcd = abcd()
mocker.patch('weather_api.get_weather', return_value=fake_weather)
actual = class_abcd.process_weather()
# Expected
expected = "processed " + "fake_weather"
# Asset
assert expected == actual
使用 mock 时,您需要指定要修补的导入,而不是底层 module/function。
from pytest_mock import mocker
def test_weather_in_batch(mocker):
# Setup
fake_weather = "fake_weather"
# Actual
class_abcd = abcd()
mocker.patch('source.sub.using_output.get_weather', return_value=fake_weather)
actual = class_abcd.process_weather()
# Expected
expected = "processed " + "fake_weather"
# Asset
assert expected == actual
在您的情况下,您正在将 get_weather
导入 using_output.py
。
因为你想在 using_output.py
中使用 get_weather
的模拟版本,这就是你需要修补的地方。