Nie jestem nie mówi o funkcji Parameterizing a fixture, która pozwala na uruchomienie urządzenia wiele razy dla zakodowanego zestawu parametrów.Jakikolwiek sposób przekazywania parametrów do urządzenia pytest?
Mam wiele testów, które następują wzór takiego:
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
Zasadniczo mam klasy, która jest klientem API i zawiera niestandardowe, znaczące wyjątki owinąć urllib2 błędy w czymś API specyficznych. Tak więc mam ten jeden wzór - łatanie niektórych metod i ustawianie efektów ubocznych na jednym z nich. Używam go w prawdopodobnie kilkunastu różnych testach, a jedyne różnice to trzy zmienne, które są używane w części side_effect i metoda MyClass(), którą nazywam.
Czy jest jakiś sposób, aby uczynić to pytonem i przekazać te zmienne?
Powiedziałem, że to nie jest to, czego chcę ... Nie chcę, aby urządzenie było tworzone wiele razy, po prostu chcę przekazać do niego parametry. –
W moim kodzie urządzenie działa tylko raz w teście. W rzeczywistości mój kod działa tak samo jak twój. Różnica polega na przekazywaniu parametrów. Jeśli chcesz wygenerować parametry w teście, a następnie przekazać je do urządzenia - twój kod to tylko sposób na zrobienie tego. Jeśli parametry są wstępnie zdefiniowane w teście, mój kod również pasuje do –
OK, wystarczy. –