@Patch-Dekorator nicht kompatibel mit pytest Vorrichtung
Dem ich begegnet bin, etwas geheimnisvoll, wenn Sie mithilfe von patch-decorator von mock-Paket integriert mit pytest Leuchte.
Habe ich zwei Module
-----test folder
-------func.py
-------test_test.py
in func.py:
def a():
return 1
def b():
return a()
in test_test.py
import pytest
from func import a,b
from mock import patch,Mock
@pytest.fixture(scope="module")
def brands():
return 1
mock_b=Mock()
@patch('test_test.b',mock_b)
def test_compute_scores(brands):
a()
Scheint es, dass patch schmücken ist nicht kompatibel mit pytest Leuchte. Hat jemand eine Einsicht auf, dass? Tnanks
- Ich hatte ein ähnliches Problem, ich war den Import
from unittest.mock import patch
sowieimport mock
hatte ich zum entfernen der import-mock-Anweisung, dann wird gestoppt, werfenfixture 'mocked_instance' not found
Fehler
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich hatte das gleiche problem und die Lösung für mich war der Einsatz von mock-Bibliothek in der version 1.0.1 (vorher war ich mit unittest.mock in version 2.6.0). Jetzt funktioniert es wie ein Charme 🙂
Bei der Verwendung pytest
fixture
mitmock.patch
-, test-parameter-Reihenfolge ist entscheidend.Wenn Sie eine fixture-parameter, bevor eine verspottet man:
dann wird das mock-Objekt wird in
my_fixture
undmocked_class
suchen ein Fixpunkt:Aber, wenn Sie die Bestellung stornieren, indem Sie den fixture-parameter am Ende:
dann wird alles in Ordnung sein.
Als der Python ist3.3, die
mock
Modul gezogen worden ist, in derunittest
Bibliothek. Es gibt auch einen backport (für frühere Versionen von Python) erhältlich als standalone-Bibliothekmock
.Kombination dieser 2-Bibliotheken im gleichen test-suite ergibt sich die oben erwähnten Fehler:
Innerhalb Ihres test-suite virtuellen Umgebung laufen
pip uninstall mock
, und stellen Sie sicher, dass Sie nicht mit der Bibliothek zurückportiert neben den core-unittest-Bibliothek. Wenn Sie re-run-tests nach der deinstallation, würden Sie sehenImportError
s, wenn dies der Fall ist.Ersetzen Sie alle Instanzen von diesem import mit
from unittest.mock import <stuff>
.Dieser geht nicht auf deine Frage direkt, aber es ist die pytest-mock - plugin, das Ihnen erlaubt, dies zu schreiben, statt:
Hoffentlich ist diese Antwort auf eine alte Frage wird auch jemand helfen.
First off, ist die Frage, nicht die Fehler, so dass wir nicht wirklich wissen, was Los ist. Aber ich werde versuchen, etwas, das mir geholfen.
Wenn Sie möchten, eine test-verziert mit einem gepatchten Objekt, dann, um für Sie zu arbeiten mit pytest können Sie einfach diesen:
Oder für mehrere patches:
pytest ist auf der Suche nach den Namen von den Leuchten nach oben in die test-Funktion/- Methode. Die Bereitstellung der
*args
argument gibt uns eine gute Umgehung des lookup phase. So, um eine Befestigung mit Pflaster, Sie könnten dies tun:Dieser arbeitete für mich läuft python 3.6 und pytest 3.0.6.