gpt4 book ai didi

python - 模拟 Django 模型和 save()

转载 作者:太空狗 更新时间:2023-10-29 22:27:31 25 4
gpt4 key购买 nike

我有以下场景:

在我的 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()

在测试中

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 的实例,而且还调用了它的保存方法?

最佳答案

这是你的问题,你目前有:

mock_foobar_class.save = save_mock

由于 mock_foobar_class 是模拟类对象,并且 save 方法是在该类的实例(而不是类本身)上调用的,因此您需要断言 save在类(又名实例)的返回值上调用。

试试这个:

mock_foobar_class.return_value.save = save_mock

希望对您有所帮助!

关于python - 模拟 Django 模型和 save(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10545049/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com