2016-06-27 9 views
0

Ich versuche, eine Konfigurationsdatei in einer Django-App zu patch und Schwierigkeiten zu verstehen, wie es zu tun, da die Art, wie wir die Konfig importieren. Ich denke nicht, dass die Tatsache, dass es Django ist, hier eine große Rolle spielt, aber es treibt diese Dateistruktur teilweise an.Patch eine Konfigurationsdatei als anderer Name in Python importiert

app/views.py

from . import config as APP_CONFIG 
...later on in some function... 
retry_count = APP_CONFIG.MAX_NUMBER_RETRIES 

app/config.py

MAX_NUMBER_RETRIES = 1 

Wie richtig ich diese Konfigurationseinstellung Patch?

Ich habe Sorten von @patch('app.views.CONFIG.MAX_NUMBER_RETRIES', 1) oder @patch('app.config.MAX_NUMBER_RETRIES', 1) in meiner Testfunktion vergeblich versucht (ich benutze Pytest).

Antwort

0

sollte diese Arbeit:

@patch('app.views.APP_CONFIG.MAX_NUMBER_RETRIES', 1) 

ich es mit einem kleinen Beispiel versucht (ohne Django) und es funktionierte wie erwartet. Dies ist wahrscheinlich nicht pytest aber mock verwandt. Schauen Sie sich die Dokumentation an: Where to patch.

+0

Dies funktioniert nicht für mich, und ich frage mich, ob, wenn das importiert wird, bevor der Test ausgeführt wird, so dass der Patch-Wert nicht ins Spiel kommt. Um genauer zu sein, verwende ich den Wert, um ein Attribut für eine Klasse (eine Django-ListView) zu setzen. – Chris

+0

Ich konnte es nicht funktionieren, aber da es Django ist, habe ich den Parameter bei der Instanziierung der Ansicht in meinem Test übergeben. Es ist einer der standardmäßigen optionalen Parameter, so dass es zum Testen in Ordnung ist, ohne den Code zu modifizieren. – Chris