boost::asio und unit testing?
-
Hallo
Ich habe mir angewöhnt zuerst Tests zu meinen Programmen zu schreiben bevor ich die eigentlichen Objekte und das eigentliche Programm entwerfe.
Nun stehe ich allerding vor einem Problem, ich würde gern die boost::asio Bibliothek nutzen würde, wie schreibt man jedoch unit tests zu dieser?
Angenommen ich würde ein einfaches Chat Programm entwickeln, ich kenne zwar die Funktionen und habe das Wissen ein solches zu entwerfen, was mir fehlt ist schlichtweg das wissen über unit tests in einem solchen. Ich kann mir einfach nicht vorstellen wie ein Unit test in einer Server / Client beziehung aussieht.
Ich würde mich über Hilfe oder sogar Code Beispiele zum Thema freuen.
-
Stichwort: Mocking.
Und immer aufpassen, dass aus den Unit-Tests nicht unabsichtlich Integration-Tests werden. *Unit != Unit-Testing

MfG SideWinder
-
Vielen dank.
Wenn ich das richtig verstanden habe, erstelle ich also eine Dummy Klasse/Schnittstelle die mir dann die Interaktionen mit meiner Klasse ausgibt?
-
Ob sie die Interaktion ausgibt oder vorgibt oder wie auch immer ersetzt kannst du entscheiden. Je nachdem welchen Einsatzfall du hast.
Jedenfalls sollen die Mocks all jene Systeme ersetzen die die Klasse nutzt: Filesystem, DB-System, andere Komponenten via Netzwerk, etc. Es soll ja nicht Zweck deines Unit-Tests sein diese mitzutesten sondern diese als funktionstüchtig anzunehmen und nur deine eigene Komponente (bspw. den Client) zu testen.
Programmierst du gerade am Server dreht sich natürlich die Sichtweise um.
MfG SideWinder
-
Anhang: Sobald du dann via Unit-Testing alle Kompnenten für sich getestet hast kannst du dich daran machen via Integration-Tests das Zusammenspiel zu testen. Dort brauchst du dann keine (oder nur noch vereinzelt) Mocks.
Diese Integrations-Tests kannst du durchaus auch mit *Unit-Frameworks schreiben, die haben dann eben Voraussetzungen wie "Um ClientConnectIntegrationTest durchzuführen ist notwendig: Internetverbindung vorhanden, Server XYZ läuft, etc."
MfG SideWinder
-
Ok, vielen dank nochmal, sehr schnelle informative antwort.
-
Schwierig schrieb:
Ich habe mir angewöhnt zuerst Tests zu meinen Programmen zu schreiben bevor ich die eigentlichen Objekte und das eigentliche Programm entwerfe.
Nun stehe ich allerding vor einem Problem, ich würde gern die boost::asio Bibliothek nutzen würde, wie schreibt man jedoch unit tests zu dieser?
Ich hatte das gleiche Problem, bei einem Open Source Projekt und habe mir mocks für tcp socket und timer geschrieben (https://github.com/TorstenRobitzki/Sioux/blob/master/source/server/test_socket.h).
Ich überlege gerade, ob ich darüber mal einen BLOG-Eintrag schreibe und bei der Suche nach anderen Möglichkeiten ASIO zu testen bin ich über Deine Frage "gestolpert"

mfg Torstn
-
Schwierig schrieb:
Ich habe mir angewöhnt zuerst Tests zu meinen Programmen zu schreiben bevor ich die eigentlichen Objekte und das eigentliche Programm entwerfe.
Nun stehe ich allerding vor einem Problem, ich würde gern die boost::asio Bibliothek nutzen würde, wie schreibt man jedoch unit tests zu dieser?
Ich hatte das gleiche Problem, bei einem Open Source Projekt und habe mir mocks für tcp socket und timer geschrieben (https://github.com/TorstenRobitzki/Sioux/blob/master/source/server/test_socket.h).
Ich überlege gerade, ob ich darüber mal einen BLOG-Eintrag schreibe und bei der Suche nach anderen Möglichkeiten ASIO zu testen bin ich über Deine Frage "gestolpert"

mfg Torstn