我不是在谈论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 夹具并传入这些变量?