我觉得这应该是一个简单的模拟,但我还没有让它工作。
我正在使用以下目录结构:
module
├── utilities.py
├── order.py
├── test
│ ├── test_order.py
相关代码如下:
def get_file_path(order_number, file_extension):
# this is what I want to mock out
from module.utilities import get_file_path
class Order():
# ...
@classmethod
def load_order(order_number, extension):
file_path = get_file_path(order_number, extension)
import unittest
from unittest.mock import patch
from module.order import order
@patch('order.get_file_path')
def mock_file(_, extension):
if extension == 'json':
return static_file_path
class TestOrder(unittest.TestCase):
def test_load_order_by_number(self):
my_order = order.load_order(number, extension)
这是我第一次尝试使用Python进行模拟。据我所知,我的工作应该有效,但每当Order
来电get_file_path
时,它总是使用utilities.py
中的那个。
我试过了:
test_load_order_by_number
module.order.get_file_path
我试着查看SO但是我发现的解决方案都没有帮助,所以我认为我只是做了一些明显错误的事情,有人可以指出。
答案 0 :(得分:0)
看起来在课堂之外创建补丁并没有被拾起。当我将补丁作为特定测试的装饰器拉出来时,它开始工作。
class TestOrder(unittest.TestCase):
@patch('utilities.order.get_file_path')
def test_load_order_by_number(self, file_mock):
def mock_get_file_path(*args, **kwargs):
if kwargs.get('extension', None) == 'json':
return static_file_path
return None
file_mock.side_effect = mock_get_file_path
my_order = order.load_order(number, extension)