在mock中,我希望某个函数在测试中返回一个新值。这就是我做到的。
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()
这给了我一个错误:
无法将kwargs传递给我们没有创建的模拟。
我使用正确的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
MyClass
方法内实例化setUp()
:
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()