python – 模拟Django模型并保存()
发布时间:2020-12-16 23:01:40 所属栏目:Python 来源:网络整理
导读:我有以下场景: 在我的models.py中 class FooBar(models.Model): description = models.CharField(max_length=20) 在我的utils.py文件中. from models import FooBardef save_foobar(value): '''acts like a helper method that does a bunch of stuff,but c
我有以下场景:
在我的models.py中 class FooBar(models.Model): description = models.CharField(max_length=20) 在我的utils.py文件中. from models import FooBar def save_foobar(value): '''acts like a helper method that does a bunch of stuff,but creates a FooBar object and saves it''' f = FooBar(description=value) f.save() 在tests.py中 from utils import save_foobar @patch('utils.FooBar') def test_save_foobar(self,mock_foobar_class): save_mock = Mock(return_value=None) mock_foobar_class.save = save_mock save_foobar('some value') #make sure class was created self.assertEqual(mock_foobar_class.call_count,1) #this passes!!! #now make sure save was called once self.assertEqual(save_mock.call_count,1) #this fails with 0 != 1 !!! 这是我正在尝试做的简化版本…所以请不要为什么我有一个utils文件和一个帮助函数(在现实生活中它做了几件事).此外,请注意,虽然简化,这是我的问题的实际工作示例.第一次调用call_count会返回1并传递.但是,第二个返回0.因此,看起来我的补丁正在工作并被调用. 我怎样才能测试不仅会创建一个FooBar实例,还会调用它上面的save方法? 解决方法
这是你的问题,你现在有:
mock_foobar_class.save = save_mock 因为mock_foobar_class是一个模拟的类对象,并且在该类的实例(而不是类本身)上调用save方法,所以需要断言在类的返回值(也就是实例)上调用save. 试试这个: mock_foobar_class.return_value.save = save_mock 我希望有所帮助! (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |