2012-11-28 9 views
7

Wie würden Sie die verschachtelte Funktion f1() im folgenden Beispiel testen?Python: Wie testest du eine verschachtelte Funktion?

def f(): 
    def f1(): 
     return 1 
    return 2 

Oder sollten Funktionen, die getestet werden müssen, nicht verschachtelt sein?

+0

@alemangui: Dank! Das beantwortet meine Frage. – e1i45

+0

Ich werde es als eine Antwort setzen :) – alemangui

Antwort

3

Es gibt eine ähnliche Frage in this link. Aber kurze Antwort: Sie können nicht auf eine innere Funktion von einem äußeren Element zugreifen.

Zu Testzwecken wäre vielleicht eine Alternative, die innere Funktion für eine private äußere zu ändern?

5

Sie nicht, weil Sie nicht können.

Sie müssen entweder Ihre Unit-Tests auf die äußere Funktion beschränken, oder Sie verschieben die innere Funktion woanders hin.

1

Ich hatte die gleichen Zweifel und fand einen Weg, Tests für innere Funktionen zu bekommen.

Grundsätzlich können Sie die innere Funktion als Parameter nach außen senden und testen wie Sie es wünschen. Wenn Sie outer() aufrufen, wird Ihr Test ausgeführt, und da es sich um eine Closure handelt, behält es zusätzliche Eigenschaften von der äußeren Funktion (wie Variablen) bei. Mit einer Liste können Sie beliebig viele Funktionen senden. Um die wenn zu ignorieren, eine Option ist, den Code so laufen:

python -O code.py 
+0

Dies ist eine sehr spezielle Falllösung. Betrachten Sie eine verschachtelte Funktion innerhalb einer Schleife, die auf lokale Variablen der äußeren Funktion zugreift (der häufigere Anwendungsfall für verschachtelte Funktionen, IMHO). – Alfe