Ich habe eine tastypie REST API-Ressource, sagen wir Resource
, die importiert und verwendet eine Funktion get_token
von libs.utils
in seiner obj_get
-Methode.Mock-Patch ersetzt Funktion nicht korrekt
So, diesen Bereich zu testen, die ich in meinem Test-Klasse haben einen Test wie geschaffen, was folgt:
mock_get_token = Mock(return_value="something")
@patch("path.to.resource.get_token", mock_get_token)
def test_get_token(self):
params = {"args": "args"}
# following call should call the get_token function in the resource
response = self.client.get("path/to/resource", params)
# do things with the response and make sure I get right output
Also, wenn ich den Test von selbst laufen, die @patch ordnungsgemäß funktioniert und wie erwartet, ersetzt die Funktion mit der Scheinfunktion. Das Ausführen des Tests innerhalb unserer größeren Testsuite für die Anwendung führt jedoch dazu, dass der Patch fehlschlägt.
Wenn Sie beispielsweise manuell versuchen, die Funktion durch die Mocked-Funktion zu ersetzen, wird ein Patch nicht erfolgreich ausgeführt. Ich frage mich, was das Problem sonst noch verursachen könnte, und ich finde es sehr merkwürdig, dass der Patch korrekt funktioniert, wenn der Test selbst oder mit einer kleineren Teilmenge unserer Testsuite ausgeführt wird.