Ich bin nicht sprechen über die Parameterizing a fixture-Funktion, die eine Vorrichtung für einen fest codierten Satz von Parametern mehrmals ausgeführt werden kann.Eine Möglichkeit, Parameter in Pytest Fixture zu übergeben?
Ich habe eine Menge von Tests, die ein Muster wie folgt:
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
Im Grunde habe ich eine Klasse, die eine API-Client ist, und umfasst kundenspezifische, sinnvolle Ausnahmen, die urllib2 Fehler in etwas API-spezifische wickeln. Also, ich habe dieses eine Muster - patchen einige Methoden und setzen Nebenwirkungen auf eine von ihnen. Ich verwende es in wahrscheinlich einem Dutzend verschiedener Tests, und die einzigen Unterschiede sind die drei Variablen, die in einem Teil des side_effect verwendet werden, und die Methode von MyClass(), die ich anrufe.
Gibt es eine Möglichkeit, dies zu einem pytest Fixture machen und diese Variablen übergeben?
Ich sagte ausdrücklich, dass dies nicht das ist, was ich will ... Ich möchte nicht, dass das Fixture mehrfach erstellt wird, ich möchte nur Parameter in das Fixture einbringen. –
In meinem Code Fixture läuft nur einmal im Test. Tatsächlich macht mein Code das gleiche wie deines. Der Unterschied besteht in der Art und Weise, in der Parameter übergeben werden. Wenn Sie Parameter innerhalb des Tests generieren und sie dann an die Fixture übergeben möchten, ist Ihr Code nur eine Möglichkeit, dies zu tun. Wenn Parameter im Test vordefiniert sind, dann passt mein Code auch –
Ok, fair genug. –