Python mock patch Funktion ersetzten

jb_alvarado

Lt. Junior Grade
Registriert
Sep. 2015
Beiträge
492
Hallo Allerseits,
bis jetzt habe ich mit dem Python Modul mock noch nicht bearbeitetet und tue mich auch etwas schwer mit dem Beispielen im Internet.
Ich würde gerne eine Funktion mit einer anderen ersetzten, aber das klappt nicht.

Also in etwa so:

Python:
#!/usr/bin/env python3

import json
from unittest.mock import patch

playlist = '''{
    "program": [
        {"source": "/path/clip1.mp4"},
        {"source": "/path/clip2.mp4"},
        {"source": "/path/clip3.mp4"},
        {"source": "/path/clip4.mp4"},
        {"source": "/path/clip5.mp4"},
        {"source": "/path/clip6.mp4"},
        {"source": "/path/clip7.mp4"}
    ]
}'''


def load_json(str):
    return json.loads(str)


def fake_load_json(str):
    d = json.loads(str)
    del d['program'][-2:]
    return d


@patch('__main__.load_json', new_callable=fake_load_json)
def main():
    print(load_json(playlist))


if __name__ == '__main__':
    # print(fake_load_json(playlist))
    main()

Das Problem ist auch, dass ich in meinem Original Code keinen Einfluss nehmen darf welchen Text die Funktion load_json übergeben bekommt, weil das durch eine andere Klasse gesteuert wird.

Würde mich über Hilfe sehr freuen!
 
Entferne das "new_callable", also einfach nur
Python:
@patch('__main__.load_json', fake_load_json)

Dann funktioniert's ;)

Doku lesen hätte helfen müssen, denn der Parameter erwartet nicht das was du ihm gibst:
The new_callable argument is useful where you want to use an alternative class to the default MagicMock for the created mock.
 
  • Gefällt mir
Reaktionen: jb_alvarado
Oh man... Habe wohl zu oberflächig die Doku überflogen... Danke!
 
Zuletzt bearbeitet:
  • Gefällt mir
Reaktionen: DaysShadow
Zurück
Oben