我正在尝试对不是很大的Django项目(目前无法更改的某些旧功能)中的新功能进行单元测试。
数据库架构已经变得非常庞大且相互交织。我们最终编写的每个测试都必须经过很长的过程才能使用许多外键来设置数据库-大多数单元测试不需要所有这些。但是Django框架将迫使我们进行设置,因为一种模型对另一种模型有外键,然后对另一种模型有外键,依此类推...
我通过模拟大多数数据库交互(即objects.filter
,objects.get
,save
等)来尝试完全不使用数据库来运行我的单元测试。
这可行,但是我无法获得有关不同属性的确认数据-更具体的示例:
@mock.patch.object(MyObject, 'save')
def testing_something_that_saves(self, mock_save_function):
# a bit of setup stuff
mock_save_function.return_value = True
call_test_function()
self.assertEquals(len(mock_save_function.mock_calls), 1)
但是在这种情况下,我如何-或者我将验证要保存的不同MyObject
呢? save()
函数调用不带参数-但我想验证所保存的对象是否具有正确的值。
也许我的方法是不正确的,但是我不能成为第一个尝试测试非常大型的Django应用程序而又不想为每个测试加载大量数据的人,尤其是那些只需要很少量的数据的测试