如何修补在 class 中调用的模块方法?
How to patch a module method that is called within a class?
我有以下结构:
# create.py
import sshHandler
class Create:
def __init__(self):
self.value = sshHandler.some_method()
# sshHandler.py
def some_method():
return True
如果我尝试修补 sshHandler.some_method 它不会按预期工作
from unittest import TestCase
from unittest.mock import patch
import create
class TestCreate(TestCase):
@patch("sshHandler.some_method")
def test_create(self, mock_ssh):
mock_ssh.return_value = False
c = create.Create()
# c.value = True but should be false
我正在寻找的结果是 some_method
也会在创建中进行修补(并且 return 为假)。如果我只是在 test_create
的上下文中调用 some_method
它会按预期工作。如何修复该补丁,使其在访问 sshHandler 时在 Create class 中也处于活动状态?
我看到了这个问题 Why python mock patch doesn't work?,但是那里提供的信息无法解决我的问题。
你打错了模块。而是修补 sshHandler.some_method
补丁 create.sshHandler.some_method
。您必须修补您正在处理的模块的对象。
我有以下结构:
# create.py
import sshHandler
class Create:
def __init__(self):
self.value = sshHandler.some_method()
# sshHandler.py
def some_method():
return True
如果我尝试修补 sshHandler.some_method 它不会按预期工作
from unittest import TestCase
from unittest.mock import patch
import create
class TestCreate(TestCase):
@patch("sshHandler.some_method")
def test_create(self, mock_ssh):
mock_ssh.return_value = False
c = create.Create()
# c.value = True but should be false
我正在寻找的结果是 some_method
也会在创建中进行修补(并且 return 为假)。如果我只是在 test_create
的上下文中调用 some_method
它会按预期工作。如何修复该补丁,使其在访问 sshHandler 时在 Create class 中也处于活动状态?
我看到了这个问题 Why python mock patch doesn't work?,但是那里提供的信息无法解决我的问题。
你打错了模块。而是修补 sshHandler.some_method
补丁 create.sshHandler.some_method
。您必须修补您正在处理的模块的对象。