gpt4 book ai didi

python side_effect - 方法的模拟行为

转载 作者:太空狗 更新时间:2023-10-30 00:01:16 26 4
gpt4 key购买 nike

在模拟中,我希望某个函数在测试中返回一个新值。我就是这样做的。

Class MyClass:

my_var = None

def foo(self, var1):
return somevalue

def bar(self):
my_var = foo(1)

Class TestClass(unittest.TestCase):
myClass = MyClass()

def _side_effect_foo(var1):
if condition:
return new_value

@patch("MyClass", "foo", side_effect='_side_effect_foo')
def test_foo(self):
self.myClass.bar()

这给了我一个错误:

Can't pass kwargs to a mock we aren't creating.

我使用的 side_effect 格式是否正确?

感谢您的帮助!

最佳答案

这里有几个问题。

  1. 您传递给 @patch 装饰器的参数不太正确。目标应指定为单个参数:

    @patch('MyClass.foo')
  2. 您的装饰测试函数将需要为修补目标接受一个额外的参数 - 例如mock_foo:

    @patch('MyClass.foo')
    def test_foo(self, mock_foo):
  3. 然后您可以在 mock_foo 上设置副作用:

    @patch('MyClass.foo')
    def test_foo(self, mock_foo):
    mock_foo.side_effect = self._side_effect_foo
  4. 此外,_side_effect_foo() 应该作为第一个参数为 self 的适当实例方法:

    def _side_effect_foo(self, var1):
    if condition:
    return new_value
  5. 最后,您应该在测试方法本身或 setUp() 方法中实例化 MyClass:

    def setUp(self):
    self.myClass = MyClass()

    @patch('MyClass.foo')
    def test_foo(self, mock_foo):
    mock_foo.side_effect = self._side_effect_foo
    self.myClass.bar()

关于python side_effect - 方法的模拟行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49556209/

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