gpt4 book ai didi

python - Patch - 修补类引入了一个额外的参数?

转载 作者:IT老高 更新时间:2023-10-28 21:06:58 27 4
gpt4 key购买 nike

第一次使用补丁。我试图修补我的一个类进行测试。如果没有尝试运行的补丁程序可以通过测试函数定义,但是有了补丁程序,测试函数定义显然需要另一个参数,我得到了一个

TypeError: testAddChannelWithNamePutsChannel() takes exactly 1 argument (2 given)

错误。测试代码如下:

import unittest
import mock
from notification.models import Channel, addChannelWithName, deleteChannelWithName

class TestChannel(unittest.TestCase):
@mock.patch('notification.models.Channel')
def testAddChannelWithNamePutsChannel(self):
addChannelWithName('channel1')
Channel.put.assert_called_with()

为什么补丁需要一个额外的参数,这个参数应该是什么?非常感谢!

最佳答案

Patch 将修补对象的一个​​实例传递给您的测试方法(或者如果您在类级别进行修补,则传递给每个测试方法)。这很方便,因为它可以让你设置返回值和副作用,或者检查调用

from unittest.mock import patch

@patch('some_module.sys.stdout')
def test_something_with_a_patch(self, mock_sys_stdout):
mock_sys_stdout.return_value = 'My return value from stdout'

my_function_under_test()

self.assertTrue(mock_sys_stdout.called)
self.assertEqual(output, mock_sys_stdout.return_value)

如果您只是想从字面上修补某些内容以忽略它,那么您可以使用以下调用调用 patch

from unittest.mock import patch, Mock

@patch('some_module.sys.stdout', Mock())
def test_something_with_a_patch(self):

这将 some_module 中的 sys.stdout 替换为 Mock 对象,并且不会将其传递给方法。

关于python - Patch - 修补类引入了一个额外的参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16051422/

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