gpt4 book ai didi

Python:使用 Mock 覆盖类方法

转载 作者:行者123 更新时间:2023-12-02 15:25:37 24 4
gpt4 key购买 nike

有一个 FooObject 类只有一个 version 字段和一个 update() 方法。

class FooObject(models.Model):
version = models.CharField(max_length=100)

我想使用 Python 的 Mock 工具覆盖单元测试的 update 方法。我该怎么做?我应该为它使用 补丁 吗?

foo_object.update = Mock(self.version = '123')

最佳答案

要做到这一点,您可以像那样使用@patch 模拟类函数

from mock import patch

# Our class to test
class FooObject():
def update(self, obj):
print obj

# Mock the update method
@patch.object(FooObject, 'update')
def test(mock1):
# test that the update method is actually mocked
assert FooObject.update is mock1
foo = FooObject()
foo.update('foo')
return mock1

# Test if the mocked update method was called with 'foo' parameter
mock1 = test()
mock1.assert_called_once_with('foo')

你甚至可以模拟更多这样的函数:

from mock import patch

class FooObject():
def update(self, obj):
print obj

def restore(self, obj):
print obj

@patch.object(FooObject, 'restore')
@patch.object(FooObject, 'update')
def test(mock1, mock2):
assert FooObject.update is mock1
assert FooObject.restore is mock2
foo = FooObject()
foo.update('foo')
foo.restore('bar')
return mock1, mock2

mock1, mock2 = test()
mock1.assert_called_once_with('foo')
mock2.assert_called_once_with('bar')

关于Python:使用 Mock 覆盖类方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30589537/

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