Ich komme aus der Java-Welt, wo Sie Variablen und Funktionen verstecken und dann Unit-Tests gegen sie mithilfe von Reflektion ausführen können. Ich habe verschachtelte Funktionen verwendet, um Implementierungsdetails meiner Klassen zu verbergen, so dass nur die öffentliche API sichtbar ist. Ich versuche Einheitentests gegen diese verschachtelten Funktionen zu schreiben, um sicherzustellen, dass ich sie nicht bei der Entwicklung zerbringe. Ich habe eine der verschachtelten Funktionen versuchte Aufruf wie:Laufende Unit Tests auf verschachtelte Funktionen
def outer():
def inner():
pass
outer.inner()
, die in der Fehlermeldung führt:
AttributeError: 'function' object has no attribute 'inner'
Gibt es eine Möglichkeit für mich, Unit-Tests gegen diese verschachtelten Funktionen zu schreiben? Wenn nicht, gibt es eine Möglichkeit, den Namen für Funktionsnamen wie für Klassenvariablen auszulösen, indem man ihnen __ vorschreibt?
Wie dies die Frage nicht beantworten? Gibt es gute Lösungen, solche inneren Funktionen für Komponententests zu isolieren oder nicht? Auch ohne Zugang zum inneren vom äußeren Funktionsobjekt, könnte dies scheinbar mit der Verwendung von Python-Modulen Parser, Ast oder Tokenizer erreicht werden, um den Code selbst zu würfeln. Offensichtlich ist das einfacher zu sagen als zu kodieren. :-) –
Es beantwortet die Frage, weil man nicht * private * Implementierungsdetails * testet. Sie können sich auf Testabdeckungstools verlassen, um Ihnen zu sagen, ob Sie Tests der öffentlichen Schnittstelle die private Implementierung angemessen ausführen. – SingleNegationElimination
@Tim: Basierend auf dem letzten Satz in der Frage, ist der Autor gut mit einer nicht-inneren Funktion, wenn es als privat markiert werden kann. Daher ist es nützlich, diese Konvention zu kennen. – orip