In Python, wie Schreibe ich unit-tests, die Zugriff auf private Attribute, ohne dass diese?

Ich versuche zu verbessern, wie Schreibe ich meine Testfälle für meine Python-Programme. Ich bin zu bemerken, in einigen Fällen, es wäre wirklich hilfreich, wenn Sie Zugriff auf private member, um sicherzustellen, dass eine Methode funktioniert. Ein Beispiel wäre, wenn Sie versuchen zu testen, Sie eine Methode für das richtige Verhalten, die keine erwartete Rendite anderen Wert als "None". Ich weiß, die einfachen und falschen Weg, dies zu tun wäre, nur machen die privaten Attribute in den protected-Attribute statt, und testen Sie Sie direkt. Allerdings würde ich gerne einen Weg finden, dass doesn ' T setzen Sie die Schnittstelle so viel.

So, wie kann ich testen, private Attribute innerhalb der Klassen, ohne dass diese in die Schnittstelle, oder, falls zutreffend, eine bessere Möglichkeit zum testen ein solches Szenario, so dass der private Attribut-Zugriff ist nicht unbedingt nötig für eine korrekte unit-Tests?

Was sind "private" und "protected" Attribute werden soll in Python? Es gibt keine solche Dinge.
Dies ist ein heikles Thema; einige Richtlinien, die sagen, wenn es privat ist, es muss nicht getestet werden!
was _var1 und __var2 als protected und private, jeweils?
Ich bin einverstanden mit @glowcoder, Ihre unit-tests sollen nur test ausgesetzt Funktionalität Ihrer Objekte. Also, wenn etwas versteckt ist, nur die interne Methoden verwenden sollten. Alles, was Sie (und Ihre tests auch) müssen wissen (und testen) über Ihr Objekt sind öffentliche Eigenschaften.
Manchmal ist es sinnvoll, in der Lage sein, um Tests der internen Methoden der Klasse, da alle Pfade richtig zu testen wäre auch dadurch erschwert, wenn der Aufruf von öffentlichen Methoden. Aber das bedeutet in der Regel muss Ihre Klasse split-refactoring in mehrere kleinere Teile, so würde ich gehen mit allen anderen: privaten, nicht testen. Es sollte abgedeckt werden durch Ihre Prüfungen der öffentlichen Methoden.

InformationsquelleAutor grg-n-sox | 2011-11-08

Schreibe einen Kommentar