我是 Python 的新手,但我曾经使用过 ruby。
我正在尝试使用 Python 进行一些测试,但我不知道如何为我的测试模拟一个类。
假设我有这个真正的类(class):
from database import DB
class Foo:
def do_it(self):
x = {'key': 'value'}
DB.save(x)
# do other stuff with x
return x
现在,我想测试我对 x 所做的一切是否返回正确的结果,我想测试是否使用 x 作为参数调用了 DB.save,但我不想实际将 x 保存到数据库。要查看是否正在调用 DB.save,我可以使用一些模拟框架,但我如何告诉 Foo 类我需要它来使用模拟对象而不是真正的 DB 对象?
谢谢。
编辑: 抱歉,我的示例不足以满足我需要完成的任务。
让我们看看这个新例子:
from database import DB
class Foo:
DB.connect()
def do_it(self):
x = {'key': 'value'}
DB.save(x)
# do other stuff with x
return x
例如,假设数据库已关闭。
当我导入 Foo 时,它引发了连接错误,我没有时间模拟数据库。
我该怎么办??
请您参考如下方法:
答案是,不要那样写你的类。无论如何,这是一种奇怪的方式——除了属性和方法定义之外,在类级别实际上不应该有任何可执行代码。您应该在 __init__ 方法中设置连接。
class Foo(object):
def __init__(self, *args, **kwargs):
DB.connect()
