我并不是在谈论pytest中的Parameterizing a fixture功能,该功能允许对一个fixture进行硬编码的参数化,以便多次运行。
我的很多测试都遵循这样的模式:
httpcode = 401 # this is different per call
message = 'some message' # this is different per call
url = 'some url' # this is different per call
mock_req = mock.MagicMock(spec_set=urllib2.Request)
with mock.patch('package.module.urllib2.urlopen', autospec=True) as mock_urlopen, \
mock.patch('package.module.urllib2.Request', autospec=True) as mock_request:
mock_request.return_value = mock_req
mock_urlopen.side_effect = urllib2.HTTPError(url, httpcode, message, {}, None)
connection = MyClass()
with pytest.raises(MyException):
connection.some_function() # this changes
本质上,我有一个类是API客户端,包括自定义的有意义的异常,将urllib2错误封装成特定于API的形式。因此,我有这样一个模式-修补一些方法,并在其中一个方法中设置副作用。我在可能有十几个不同的测试中使用它,唯一的区别是在side_effect的一部分中使用的三个变量以及我调用的MyClass()方法。
有没有办法将其作为pytest fixture,并传入这些变量?
getattr
),并将方法名称(以及可能是任何调用参数的关键字字典,加上您自定义的异常类型)作为参数集中的附加组件传递。 - benjimin