python – 模拟Django模型并保存()

python – 模拟Django模型并保存(),第1张

概述我有以下场景: 在我的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 我有以下场景:

在我的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 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方法?

@H_403_18@解决方法 这是你的问题,你现在有:
mock_foobar_class.save = save_mock

因为mock_foobar_class是一个模拟的类对象,并且在该类的实例(而不是类本身)上调用save方法,所以需要断言在类的返回值(也就是实例)上调用save.

试试这个:

mock_foobar_class.return_value.save = save_mock

我希望有所帮助!

@H_403_18@ @H_403_18@ 总结

以上是内存溢出为你收集整理的python – 模拟Django模型并保存()全部内容,希望文章能够帮你解决python – 模拟Django模型并保存()所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1206607.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-04
下一篇 2022-06-04

发表评论

登录后才能评论

评论列表(0条)

保存