Python 如何模拟使用别名导入的函数?

Python 如何模拟使用别名导入的函数?,python,unit-testing,mocking,Python,Unit Testing,Mocking,下面我添加了一些虚拟代码,这些代码正好代表了我要做的事情 我正在从一个具有别名的类导入一个函数,之所以这样做是因为该类本身正在运行别名版本 我尝试过的事情: 这并没有给出问题的具体解决方案 修补a.dummy.class.function.aliasasa.dummy.class.function这允许执行,但不会运行别名函数,因为在类中,函数称为别名()而不是函数() 我尝试以a.dummy.class.function.alias的身份运行,但这会导致属性错误,因为alias实际上不是类的

下面我添加了一些虚拟代码,这些代码正好代表了我要做的事情

我正在从一个具有别名的类导入一个函数,之所以这样做是因为该类本身正在运行别名版本

我尝试过的事情:

  • 这并没有给出问题的具体解决方案
  • 修补
    a.dummy.class.function.alias
    as
    a.dummy.class.function
    这允许执行,但不会运行别名函数,因为在类中,函数称为别名()而不是函数()
  • 我尝试以
    a.dummy.class.function.alias的身份运行,但这会导致属性错误,因为alias实际上不是类的属性(因为function()是)

我认为问题的根源在于类文件使用别名调用函数,而似乎没有办法修补别名函数调用。我能想到的最简单最简单的解决方案就是不要使用别名。

您需要模拟对象所在的位置。如果将模块/函数导入到file.py,则需要模拟此文件的对象

如果在方法的同一文件中使用测试,则可能是以下解决方案:

from os.path import isdir as is_it_a_dir
from unittest.mock import patch

def check(path):
    return is_it_a_dir(path)

with patch('__main__.is_it_a_dir') as mock_isitadir:
    mock_isitadir.return_value = True
    assert check('/any/invalid/path') == True
如果您的测试在另一个文件中,那么您的方法应该可以工作

from os.path import isdir as is_it_a_dir
from unittest.mock import patch

def check(path):
    return is_it_a_dir(path)

with patch('__main__.is_it_a_dir') as mock_isitadir:
    mock_isitadir.return_value = True
    assert check('/any/invalid/path') == True