Automatische Tests mit Git-Hooks

Na, schon wieder vergessen Deinen Code zu testen, bevor Du Ihn ins Remote Repository geschoben hast? Dabei hattest Du Dir schon extra ein Postit an Deinen Monitor geklebt. Aber mach Dir nichts draus. Deine Unit-Tests kannst Du ganz einfach automatisiert ausführen - mit Git-Hooks.

Hooks bezeichnen Shell-Skripte, die von Git nach oder vor bestimmten Operationen durchgeführt werden. Das kann zum Beispiel ein Push oder ein Pull sein. Hooks müssen im Ordner .git/hooks in Deinem Repository angelegt werden. Tatsächlich sind in jedem neu erstellten Repository bereits mehrere Hooks als Beispiele hinterlegt. Eine Auflistung der gängigsten Hooks findest Du hier.

Um das eingangs beschriebene Problem zu lösen, benötigen wir die Hook pre-push. Diese wird vor jedem Push-Vorgang ausgeführt. Das schöne an dieser Hook ist, dass sie den Push-Vorgang abbricht, wenn innerhalb der Hook ein Exit-Code von 1 geworfen wird. Da so ziemlich alle Test-Frameworks einen entsprechenden Fehlercode werfen, werden dann nur noch Pushes zugelassen, die auch die Tests bestehen.

Wir legen also eine Datei pre-push lokal in den Ordner .git/hooks in unserem Repository. Der Inhalt der Datei kann dabei wie folgt aussehen:

#!/usr/bin/env bash

echo "Running tests..."
phpunit test

Die Datei muss ausführbar sein, weswegen wir sie mit chmod +x pre-push mit entsprechenden Rechten versehen. Wie und welche Tests letztendlich ausgeführt werden, ist natürlich vom jeweiligen Projekt abhängig. Ich gehe hier nun einfach mal von einen PHP-Projekt mit PHPUnit als Testsuite aus. Dieser Hook verhindert nun, dass Code von Dir ins Repository gelangt, der die Unit-Tests nicht besteht. Genauso kann man aber auch beispielweise den Coding-Stil überprüfen usw. Viel Spaß beim Ausprobieren. Ich hoffe ich konnte Dir weiter helfen.


Kommentare


Wichtig: Durch den Click auf die obige Checkbox stimmst Du ausdrücklich der Übertragung von Daten an Facebook zu. Die Zustimmung erfolgt einmalig für die Kommentare dieses Artikels und wird nicht gespeichert. Weitere Details kannst Du dem Punkt Social Plugins der Datenschutzerklärung entnehmen.