python side_effect - 方法的模拟行为
python side_effect - mocking behavior of a method
在模拟中,我想要某个函数在测试中return一个新值。我就是这样做的。
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 格式是否正确?
感谢您的帮助!
这里有一些问题。
您传递给 @patch
装饰器的参数不太正确。目标应指定为单个参数:
@patch('MyClass.foo')
您的修饰测试函数将需要接受修补目标的附加参数 - 例如mock_foo
:
@patch('MyClass.foo')
def test_foo(self, mock_foo):
然后您可以在 mock_foo
上设置副作用:
@patch('MyClass.foo')
def test_foo(self, mock_foo):
mock_foo.side_effect = self._side_effect_foo
此外,_side_effect_foo()
应该作为第一个参数self
的适当实例方法:
def _side_effect_foo(self, var1):
if condition:
return new_value
最后,您应该在测试方法本身或 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()
在模拟中,我想要某个函数在测试中return一个新值。我就是这样做的。
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 格式是否正确?
感谢您的帮助!
这里有一些问题。
您传递给
@patch
装饰器的参数不太正确。目标应指定为单个参数:@patch('MyClass.foo')
您的修饰测试函数将需要接受修补目标的附加参数 - 例如
mock_foo
:@patch('MyClass.foo') def test_foo(self, mock_foo):
然后您可以在
mock_foo
上设置副作用:@patch('MyClass.foo') def test_foo(self, mock_foo): mock_foo.side_effect = self._side_effect_foo
此外,
_side_effect_foo()
应该作为第一个参数self
的适当实例方法:def _side_effect_foo(self, var1): if condition: return new_value
最后,您应该在测试方法本身或
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()