【发布时间】:2013-03-17 22:36:19
【问题描述】:
我正在将 Django REST Framework 用于我正在处理的 API。出于几个原因,我想使用基于类的视图。但是,我对我的单元测试有点挑剔,我从不让我的单元测试接触数据库。注意:我总是使用 Carl Meyer 在 Pycon 2012 演示的“技巧”,他在其中模拟了 Cursor 包装器。
cursor_wrapper = Mock()
cursor_wrapper.side_effect = RuntimeError("No touching the database!")
@patch('django.db.backends.util.CursorWrapper', cursor_wrapper)
class TestMyCode(TestCase):
如果您对幻灯片感兴趣,这里是link。
我在其中一个视图中有一个方法可以检查数据库中的某些内容。为了干燥,它在 POST 和 PUT 之间共享。但是,我在为我的单元测试模拟它时遇到了问题。这是因为类方法 as_view 创建了一个新的实例和类调度,并返回调度返回的“处理程序”函数。因此,我似乎无法在基于类的视图中获取共享方法来模拟它。
我可以模拟出基于类的视图所使用的模型,但是我必须从根本上打破我“干”的目标,并在 POST 和 PUT 中复制代码。我想我可以重构代码并将逻辑移到模型上。但是,我不肯定我想这样做。
如何模拟基于类的视图的共享方法以避免实际接触数据库?只是避开它们?
【问题讨论】:
标签: django unit-testing django-models python-2.7 python-mock