Kat*_*Kat 5 python unit-testing python-2.7
使用Python进行mock.patch测试时,如果调用了类中没有的属性,则可以使用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
Run Code Online (Sandbox Code Playgroud)
有没有办法让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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
209 次 |
| 最近记录: |