我编写了一个模型类,它将一些 RethinkDB 功能包装在一个对象中。它的一部分看起来像:
class Model(object):
__metaclass__ = ModelType
def __init__(self, **kwargs):
self._fields = kwargs
self._saved = False
def save(self):
if self._saved:
id = self._fields.pop('id')
result = r.table(self._tablename)
.get(id)
.update(self._fields, return_vals=True)
.run(self.connection())
else:
result = r.table(self._tablename)
.insert(self._fields, return_vals=True)
.run(self.connection())
if result['errors'] > 0:
raise ActionError(result['first_error'])
self._fields = result['new_val']
self._saved = True
现在,我想测试该save()
方法是否完成了它应该做的事情。由于我为此操作使用数据库连接,因此在测试之前创建和删除连接既昂贵又无用,因为我只需要测试是否调用了r
对象上的正确方法。显然,模拟是解决这个问题的方法,但我在应该模拟什么以及如何模拟r
对象方面遇到了一些困难。我承认我不熟悉模拟概念。
那么,在我的测试方法中save()
,如何测试update()
/insert()
是否已使用正确的参数调用,以及如何为它们分配一些返回值?