我有一个表示我们的数据库层的类,该类在某些类中内部实例化(我不能将其作为外部参数传递)
,例如:
class MyClass(object):
def __init__(self):
self.dbapi = DatabaseAPI()
self.timeout = 120
def some_methods(self):
pass
我们正在编写一些单元测试,并且我们想使用我们将在测试运行之前创建的现有实例来模拟self.dbapi。
例如:
my_dbapi = DatabaseAPIMock()
...
...
@patch('MyModule.DatabaseAPI', my_dbapi)
def my_test(self):
my_class = MyClass() #<---This is where I'm not able to mock the DatabaseAPI
到目前为止,这是我试图实现的目标,但是从调试代码后,我看到self.dbapi是使用实际对象而不是使用预制的模拟实例化的。
我想念什么?
顺便说一句,我们正在运行python 2.7
提前致谢!
您正在修补错误的内容。您需要修补分配属性的模块,即包含目标类的模块。
如果在目标类中定义一个获取DatabaseAPI对象的方法会更容易。这样,您可以更轻松地对其进行修补。
class MyClass(object):
def __init__(self):
self.dbapi = self.get_db_api()
self.timeout = 120
def get_db_api():
return DatabaseAPI()
测试变成:
@patch('my_module.MyClass.get_db_api')
def my_test(self, my_method):
my_method.return_value = my_dbapi
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句