Shi*_*tel 8 python unit-testing mocking
下面我添加了一些虚拟代码,它们准确地代表了我想要做的事情。
我正在从具有别名的类导入函数,我这样做是因为该类本身正在运行别名版本。
我尝试过的事情:
a.dummy.class.function.alias因为a.dummy.class.function这允许执行,但不会运行 alias_function_mocker() ,因为在类中该函数被称为 alias() 而不是 function()a.dummy.class.function.alias但这会导致属性错误,因为别名实际上不是类的属性(因为 function() 是)from a.dummy.class import function as alias
def alias_function_mocker():
return 0
@patch("a.dummy.class.function.alias", side_effect=alias_function_mocker):
def test_function(mocked_function):
function_calling_alias()
return 0
Run Code Online (Sandbox Code Playgroud)
我认为问题的根源在于类文件使用别名调用函数,并且似乎没有办法修补别名函数调用。我能想到的简单且最天真的解决方案就是不使用别名。
您需要模拟该对象所在的位置。如果您将模块/函数导入到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
Run Code Online (Sandbox Code Playgroud)
如果您的测试在另一个文件中,那么您的方法应该有效。
| 归档时间: |
|
| 查看次数: |
2121 次 |
| 最近记录: |