使用
mock.patch
在 Python 中进行测试时,如果调用类中不存在的属性,您可以使用 spec 来确保测试失败。但这些不允许您使用在 __init__
: 中创建的属性
class A(object):
def __init__(self):
self.init_prop = 4
def regular_prop():
pass
with patch('__main__.A', spec=True) as A_mock:
# accessing regular_prop on an instance of A_mock succeeds
# accessing init_prop on an instance of A_mock raises an exception
有没有办法让
patch
或其他工具自动捕获在__init__
中创建的属性?
由于实例属性仅在实例实际实例化后创建,因此您必须创建该类的实际实例才能创建指定的模拟对象。如果实例化涉及任何外部资源,请对这些资源进行修补,以保持单元测试不受依赖关系的影响:
import sqlite3
from unittest.mock import patch
class A(object):
def __init__(self):
self.init_prop = sqlite3.connect('foo.db') # an external resource
with patch('sqlite3.connect'):
a = A()
with patch('__main__.a', spec=True) as a_mock:
print(a_mock.init_prop) # succeeds