Ich habe das "Replace Method with Method Object" Refactoring durchgeführt, das von Beck beschrieben wird.Wie teste ich Unit-Methoden in einem Methodenobjekt?
Jetzt habe ich eine Klasse mit einer "run()" -Methode und eine Reihe von Elementfunktionen, die die Berechnung in kleinere Einheiten zerlegen. Wie kann ich diese Mitgliedsfunktionen testen?
Meine erste Idee ist, dass meine Einheit Tests im Grunde Kopien der "run()" -Methode (mit verschiedenen Initialisierungen), aber mit Assertions zwischen jedem Aufruf an die Mitgliedsfunktionen, um den Status der Berechnung zu überprüfen.
(Ich verwende Python und das Unittest-Modul.)
class Train:
def __init__(self, options, points):
self._options = options
self._points = points
# other initializations
def run(self):
self._setup_mappings_dict()
self._setup_train_and_estimation_sets()
if self._options.estimate_method == 'per_class':
self._setup_priors()
self._estimate_all_mappings()
self._save_mappings()
def _estimate_all_mappings():
# implementation, calls to methods in this class
#other method definitions
Ich habe auf jeden Fall die Erwartungen darüber, was die die Zustände der Mitglied Attribute vor und nach der Anrufe an die die verschiedenen Methoden als Teil sein sollte die Implementierung der run()
Methode. Sollte ich Aussagen über diese "privaten" Attribute machen? Ich weiß nicht, wie ich diese Methoden noch weiter zusammenführen könnte.
Die andere Möglichkeit ist, dass ich diese wirklich nicht testen sollte.
Einige Code oder Pseudo-Code wäre hilfreich, um Ihre Frage zu verstehen. Von dem, was Sie geschrieben haben, klingt es so, als könnten Sie von der unittest.TestCase.setUp() -Methode profitieren. http://docs.python.org/library/unittest.html#unittest.TestCase.setUp – msw
Ich habe Ihre Frage mit dem von Ihnen bereitgestellten Code bearbeitet. Können Sie überprüfen, ob die Einrückung korrekt ist, und ggf. erneut bearbeiten? –
@ire_and_curses. Danke, ein bisschen bearbeitet. –