【问题标题】:Mocking local function from another file从另一个文件模拟本地函数
【发布时间】:2019-07-02 18:59:57
【问题描述】:

我需要修补从同一文件导入的函数,该文件包含我要测试的另一个函数,但它不起作用 =/。

# funcs.py

def func_one():
    return 1


def func_two():
   return func_one() + 2
from .funcs import func_two

class TestFunc(TestCase):
    def test_func_two(self):
        with patch('func_one', 0):
            result = func_two()

result 应该是两个,但我的测试出错了:

TypeError: Need a valid target to patch. You supplied: 'func_one'

【问题讨论】:

  • 你需要修补 .func_one.funcs,而不是你当前的模块。

标签: python mocking patch python-unittest


【解决方案1】:

我需要导入函数的绝对路径:

from .funcs import func_two

class TestFunc(TestCase):
    def test_func_two(self):
        @patch('funcs.func_one', MagicMock(return_value=0)):
            result = func_two()

其中funcs.func_one整个模块路径+函数名称

【讨论】:

  • @patch 应该在测试函数之上,如果使用装饰器,您还需要传入一个参数。另外你不需要用户MagicMock(return_value=0),可以使用@patch('funcs.func_one', return_value=0)
猜你喜欢
  • 2019-09-19
  • 2018-08-27
  • 1970-01-01
  • 1970-01-01
  • 2020-11-06
  • 1970-01-01
  • 2021-11-20
  • 2019-08-20
  • 2019-04-10
相关资源
最近更新 更多