Aspekte guter Unit-Tests

Dieser Artikel ist eine Zusammenfassung des Buches " Unit Testing Principles ".





Beginnen wir mit der Auflistung der Eigenschaften guter Komponententests.





Zuerst. Integriert in den Entwicklungszyklus. Nur die Tests, die Sie aktiv verwenden, sind nĂŒtzlich. sonst macht es keinen Sinn, sie zu schreiben.





Zweite. Es werden nur die wichtigsten Teile Ihres Codes getestet. Nicht jeder Arbeitscode verdient die gleiche Aufmerksamkeit.





Dritte. Bieten Sie maximalen Schutz vor Fehlern bei minimalen Wartungskosten. Dazu mĂŒssen Sie in der Lage sein, effektive Tests zu erkennen und zu schreiben.





Das Erkennen und Schreiben eines effektiven Tests sind jedoch zwei verschiedene FĂ€higkeiten. Und um die zweite FĂ€higkeit zu erwerben, mĂŒssen Sie zuerst die erste beherrschen. Der Rest dieses Artikels zeigt Ihnen, wie Sie einen effektiven Test erkennen. Die Pyramide des Testens und Testens nach dem "Black Box" / "White Box" -Prinzip wird ebenfalls berĂŒcksichtigt.





Vier Aspekte guter Unit-Tests

Ein guter Komponententest sollte die folgenden Eigenschaften aufweisen: Fehlerschutz, Refactoring-Widerstand, schnelles Feedback und einfache Wartung.





Diese vier Attribute sind grundlegend. Sie können verwendet werden, um jeden automatisierten Test zu analysieren, sei es Einheits-, Integrations- oder End-to-End-Tests.





Beginnen wir mit dem ersten Attribut eines guten Komponententests: dem Schutz von Fehlern. Ein Fehler (oder eine Regression) ist ein Softwarefehler. In der Regel treten solche Fehler nach Änderungen am Code auf.





Je mehr Funktionen verfĂŒgbar sind, desto höher ist die Wahrscheinlichkeit, dass Sie der neuen Version einen Fehler hinzufĂŒgen. Aus diesem Grund ist es so wichtig, einen guten Fehlerschutz zu entwickeln. Ohne einen solchen Schutz wird es aufgrund der stĂ€ndig steigenden Anzahl von Fehlern unmöglich oder sehr schwierig sein, das Wachstum des Projekts langfristig sicherzustellen.





Beachten Sie Folgendes, um zu beurteilen, wie gut ein Test im Hinblick auf den Fehlerschutz abschneidet:





  • die Menge an Code, die vom Test ausgefĂŒhrt wird;





  • die KomplexitĂ€t dieses Codes;





  • die Bedeutung dieses Codes fĂŒr die GeschĂ€ftslogik.





, ,  . ,   (assertions).





, -. , -, —  .





, .   - -.





- — . ,   .





.   : . —   .





. :  , , . , , . , .





?   .  - .   ,     .





:





  • ,   .   .   .





  •   . -,   . , .





?

, , .  , .  :  . — ,  , .





— , . , ,   . — ,   .





Feige.  1 - Der Test auf der linken Seite bezieht sich auf das beobachtete Verhalten des SUT, nicht auf die Implementierungsdetails.  Ein solcher Test ist widerstandsfÀhiger gegen Refactoring als der Test auf der rechten Seite.
. 1 – SUT, . ,

- ( ) .   , . - :   ,   .





, .   ( ),   , ( ).





, , , :   ( ).





Feige.  2 - Beziehung zwischen Fehlerschutz und Refactoring-Widerstand
. 2 -

, , .   : . .     — II .





, :  , . . .





: , . :





  • ( , );





  • ( , ).





. 3,   . — (),   . —  (), .





Feige.  3 - Formel der Testgenauigkeit
. 3 –

:  

  -. ,   .  . , ,   ,  .





. :





  • . .   , .





  • . , , .





.   «» :   , .





  , .   , .





? , . , —  , —  . :   .





, . ,   . ,  , .





— (end-to-end) . .  ,  , .





, . , , ,  .  - , .





: . ,   , . .





—  . ,  .





Feige.  4 - Trivialer Test, der ein einfaches StĂŒck Code abdeckt
. 4 - ,

, . , ,   .   - ,   .





-  , , . :   , .





Feige.  5 - Orte, die die Tests in Beziehung zueinander nehmen
. 5 – ,

— — , (end-to-end) . - ,   .   . ,  .





.   ; . , .  , ,   . .





,   ; .   .





Feige.  6 - Kompromisse zwischen den Attributen eines guten Tests
. 6 –

?  :   , .  . ,   . ,   .





- CAP. ,   : (consistency) , (availability), (partition tolerance).





:





1. CAP ;





2.   . —  , , - Amazon — .     .





  : -, , .





.   . , . , .   .   ,   .





Feige.  7 - Die Testpyramide schreibt ein bestimmtes VerhÀltnis von Einheits-, Integrations- und End-to-End-Tests vor
. 7 - -,
Feige.  8 - Verschiedene Arten von Tests in der Pyramide treffen unterschiedliche Entscheidungen hinsichtlich schneller RĂŒckmeldung und Schutz vor Fehlern
. 8 -

. :   ; - — ;   - .





, –  . :   . ,   .





. - ,   -, — .   ;   , ,  (, ). CRUD-  - .





— API, (, ).   . , .   ,   — .





« » « »

« » .   . , , , .





« »  . . ,   .





Feige.  9 - Vor- und Nachteile von Black-Box- und White-Box-Tests
. 9 - « » « »

,   : , .   « ». — , -, — « »  , -.   -, .





  • -





  • Aspekte guter Unit-Tests





  • WofĂŒr ist Integrationstest?








All Articles