Meine Mitarbeiter und ich hatten letzte Nacht ein wenig Meinungsverschiedenheiten über Komponententests in unserer PHP/MySQL-Anwendung. Die Hälfte von uns argumentierte, dass wenn Sie eine Funktion innerhalb einer Klasse testen, Sie alles außerhalb dieser Klasse und ihrer Eltern verspotten sollten. Die andere Hälfte von uns argumentierte, dass Sie nichts verspotten sollten, was eine direkte Abhängigkeit der Klasse ist.Unit Testing-- grundlegendes Ziel?
Das spezielle Beispiel war unser Protokollierungsmechanismus, der durch eine statische Protokollierungsklasse erfolgte und wir hatten eine Reihe von Logging :: log() - Aufrufen an verschiedenen Stellen in unserer Anwendung. Die erste Hälfte von uns sagte, dass der Logging-Mechanismus gefälscht (verspottet) werden sollte, weil er in den Logging-Unit-Tests getestet würde. Die zweite Hälfte von uns argumentierte, dass wir die ursprüngliche Protokollierungsklasse in unseren Komponententest einbeziehen sollten. Wenn wir Änderungen an unserer Protokollierungsschnittstelle vornehmen, können wir sehen, ob Probleme in anderen Teilen der Anwendung aufgrund eines Fehlers auftreten um die Anrufschnittstelle zu aktualisieren.
Also die grundlegende Frage ist, ob Unit Tests dazu dienen, die Funktionalität einer einzelnen Einheit in einer geschlossenen Umgebung zu testen oder die Konsequenzen von Änderungen an einer einzelnen Einheit in einer größeren Umgebung aufzuzeigen? Wenn es einer von diesen ist, wie bewerkstelligen Sie den anderen?
+1 Dies ist eine gute Frage, weil es etwas enthüllt, von dem ich denke, dass viele Leute mit Komponententests verwirrt sind. – Fenton