Jeder Komponententest sollte sich auf das Testen eines einzelnen Verhaltens konzentrieren, daher sollte die Codeabdeckung eines Komponententests idealerweise sehr klein sein. Dann, wenn Sie Hunderte und Tausende solcher sehr fokussierten Tests haben, sollte ihre Gesamtabdeckung hoch sein.
Leistung ist nicht und ist wichtig.
Die Leistung ist nicht wichtig in dem Sinne, dass keine Mikrooptimierungen durchgeführt werden sollten. Sie sollten sich zunächst auf die Lesbarkeit der Tests konzentrieren. Zum Beispiel enthält das Buch Clean Code ein Beispiel für Tests, die den Zustand eines Temperaturalarms verifiziert haben. Ursprünglich hatte jeder Test einige fünf Bestätigungen, die Booleans wie assertTrue(hw.heaterState())
überprüfen, aber die Behauptungen wurden dann zu einem String-Vergleich assertEquals("HBchL", hw.getState())
refaktoriert, wobei Großbuchstaben aktiviert und Kleinbuchstaben deaktiviert bedeutet. Der letztere Code hat eine geringere Leistung, weil er einige zusätzliche Zeichenfolgen erzeugt und vergleicht, aber seine Lesbarkeit ist viel besser, daher ist es besser Testcode.
Die Leistung ist in dem Sinne wichtig, dass alle Komponententests schnell, hunderte oder tausende von Tests pro Sekunde ausgeführt werden sollten (ich bevorzuge im Durchschnitt weniger als 1 ms pro Test). Sie sollten in der Lage sein, alle Ihre Komponententests in wenigen Sekunden auszuführen. Wenn die Tests so lange dauern, dass Sie zögern, sie auszuführen, nachdem Sie eine kleine Änderung vorgenommen haben, und stattdessen führen Sie sie nur aus, wenn Sie mehr Kaffee trinken, dann brauchen sie zu lange Zeit.Wenn die Testsuite langsam ist, sollten Sie Abhängigkeiten zu anderen Komponenten aufbrechen und nachahmen, damit das zu testende System so klein wie möglich ist. Insbesondere sollten die Komponententests keine Datenbank verwenden, da sie dadurch hoffnungslos langsam werden.
Zusätzlich zu Komponententests sind auch Integrations-/Akzeptanztests erforderlich, die das System als Ganzes testen. Sie haben eine andere Rolle in der Entwicklung als Komponententests, so dass es akzeptabel ist, dass die Akzeptanztestsuite langsam ist (kein Wortspiel beabsichtigt). Sie sollten mindestens einmal am Tag vom Continuous Integration Server ausgeführt werden.
Wenn Leistung * für Sie ein Problem darstellt, sollten Sie sich über die Teile des Prozesses lustig machen, die derzeit nicht getestet werden (z. B. Datenbankzugriff oder Remote-Serveraufrufe). Dies hat den zusätzlichen Vorteil, dass der Testumfang reduziert wird Verbesserung der Leistung. –