Ich versuche herauszufinden, warum ich nicht in der Lage, einen verspotteten Rückgabewert in einem Gerät zu verwenden scheinen. Mit den folgenden EinfuhrenPytest-Mock Spötter in Pytest Fixture
import pytest
import uuid
pytest-Mock-Beispiel, das funktioniert:
def test_mockers(mocker):
mock_uuid = mocker.patch.object(uuid, 'uuid4', autospec=True)
mock_uuid.return_value = uuid.UUID(hex='5ecd5827b6ef4067b5ac3ceac07dde9f')
# this would return a different value if this wasn't the case
assert uuid.uuid4().hex == '5ecd5827b6ef4067b5ac3ceac07dde9f'
Der obige Test besteht. aber als ich dies in vielen Testfällen verwenden dachte ich, dass ich nur eine Halterung verwenden:
@pytest.fixture
def mocked_uuid(mocker):
mock_uuid = mocker.patch.object(uuid, 'uuid4', autospec=True)
mock_uuid.return_value = uuid.UUID(hex='5ecd5827b6ef4067b5ac3ceac07dde9f')
return mock_uuid
def test_mockers(mocked_uuid):
# this would return a different value if this wasn't the case
assert uuid.uuid4().hex == '5ecd5827b6ef4067b5ac3ceac07dde9f'
mit der folgenden Ausgabe der oben versagt:
FAILED
phidgetrest\tests\test_taskscheduler_scheduler.py:62 (test_mockers)
mocked_uuid = <function uuid4 at 0x0000029738C5B2F0>
def test_mockers(mocked_uuid):
# this would return a different value if this wasn't the case
> assert uuid.uuid4().hex == '5ecd5827b6ef4067b5ac3ceac07dde9f'
E AssertionError: assert <MagicMock name='uuid4().hex' id='2848515660208'> == '5ecd5827b6ef4067b5ac3ceac07dde9f'
E + where <MagicMock name='uuid4().hex' id='2848515660208'> = <MagicMock name='uuid4()' id='2848515746896'>.hex
E + where <MagicMock name='uuid4()' id='2848515746896'> = <function uuid4 at 0x0000029738C5B2F0>()
E + where <function uuid4 at 0x0000029738C5B2F0> = uuid.uuid4
tests\test_taskscheduler_scheduler.py:65: AssertionError
der Hoffnung, jemand kann mir helfen, warum zu verstehen das eine funktioniert und das andere nicht oder besser noch eine funktionierende Lösung!
Ich habe auch versucht, den Umfang der Leuchte [Sitzung, Modul, Funktion] zu ändern, nur für den Fall, dass ich nicht wirklich verstehe, warum es versagt.
Ihr Beispiel funktioniert gut für mich, sowohl auf Python 2 und 3. –
Könnten Sie bitte einige Einzelheiten Ihres Setups und wie Sie es ausgeführt haben ? vielleicht kann ich aufspüren, worum es in meiner Umgebung geht, die nicht funktioniert. Ich benutze Python 3.6 (prob sollte das erwähnt haben) Auf jeden Fall dachte ich, es sollte funktionieren und eine github Suche zeigte ähnliche Beispiele von patch.object mit Pytest-Mock in einer Halterung, aber nicht für mich. – ehindy
Ich habe die Datei verwendet, die Sie oben gezeigt haben, mit einem zusätzlichen Importpytest, Uuid. Dann lief es mit Python 3.6 und Pytest 3.0.7. Wenn Sie Ihren StackTrace betrachten, führen Sie nicht den Code aus, den Sie oben gezeigt haben. –