Hallo zusammen,
ich habe jetzt endlich in der Projektleitung zumindest ein wenig Zeit bekommen, um mehr JUNIT-Tests zu schreiben. Deswegen hatte ich jetzt zum neuen Release mehr davon geschrieben, allerdings habe ich scheinbar einen Denkfehler.
In unserer Anwendung rufen wir viele andere Anwendungen per Rest-Call an, um dort hauptsächlich Daten abzufragen. Deswegen habe ich eine Integration des Http-Client gebaut und an dieser hängen dann mehrere Integrationen der anderen Anwendungen, in denen ich dann den Allgemeinen kram regele, wie z.B. ein Login aufgebaut wird, oder wie muss die URL gebaut werden, um auf einen bestimmten Funktionsbaustein zu kommen.
Diese Klassen wollte ich testen, weil ein Fehler in den Methoden durch winzige Änderungen eben riesige Auswirkungen haben kann. Ist ja quasi der Standard für JUnit.
Die Testfälle laufen aber direkt gegen die anderen Systeme. Soweit eigentlich für mich erstmal kein Problem. Aber, jetzt hatten wir letzte Woche den Fall, dass wir einen Fehler fixen wollten und zum abschließenden Test sollte die Anwendung auf den Entwicklungsserver und der Build lief nicht durch, weil eine komplette Testklasse auf Fehler lief, weil das Gegensystem gerade ein Update bekommen hat und deswegen nicht zur Verfügung stand.
Ich weiß, für solche Fälle soll man das Ganze eben mocken, dann ist man auf das externe System nicht angewiesen, aber hier verstehe ich die Sache nicht 100%tig:
Ich gehe also hin, rufe meine Funktion auf und mocke eben die Antwort, die ich erwarte, dass sie bei diesem Aufruf vom Server kommt. Soweit so gut. Aber wir hatten schon den Fall, dass meine Klassen nicht mehr funktioniert haben, weil die andere Anwendung ein Major-Update bekommen hat und deswegen ein paar Funktionsbausteine verschoben worden sind. Jetzt würde mein Test durchlaufen, aber im Real-Fall geht er auf die Bretter, weil die erwartete Antwort nicht mehr die echte Antwort ist.
Für einen Fall, wie letzte Woche würde mir reichen, wenn gemockte Tests durchlaufen, aber sollten wir gesagt bekommen, dass eine andere Anwendung ein Update bekommen hat, dann hätte ich gerne die Möglichkeit automatisiert zu prüfen, ob alle meine Klassen dazu noch funktionieren, oder irgendwo anpassungsbedarf ist.
Wie mache ich das in der Praxis?
ich habe jetzt endlich in der Projektleitung zumindest ein wenig Zeit bekommen, um mehr JUNIT-Tests zu schreiben. Deswegen hatte ich jetzt zum neuen Release mehr davon geschrieben, allerdings habe ich scheinbar einen Denkfehler.
In unserer Anwendung rufen wir viele andere Anwendungen per Rest-Call an, um dort hauptsächlich Daten abzufragen. Deswegen habe ich eine Integration des Http-Client gebaut und an dieser hängen dann mehrere Integrationen der anderen Anwendungen, in denen ich dann den Allgemeinen kram regele, wie z.B. ein Login aufgebaut wird, oder wie muss die URL gebaut werden, um auf einen bestimmten Funktionsbaustein zu kommen.
Diese Klassen wollte ich testen, weil ein Fehler in den Methoden durch winzige Änderungen eben riesige Auswirkungen haben kann. Ist ja quasi der Standard für JUnit.
Die Testfälle laufen aber direkt gegen die anderen Systeme. Soweit eigentlich für mich erstmal kein Problem. Aber, jetzt hatten wir letzte Woche den Fall, dass wir einen Fehler fixen wollten und zum abschließenden Test sollte die Anwendung auf den Entwicklungsserver und der Build lief nicht durch, weil eine komplette Testklasse auf Fehler lief, weil das Gegensystem gerade ein Update bekommen hat und deswegen nicht zur Verfügung stand.
Ich weiß, für solche Fälle soll man das Ganze eben mocken, dann ist man auf das externe System nicht angewiesen, aber hier verstehe ich die Sache nicht 100%tig:
Ich gehe also hin, rufe meine Funktion auf und mocke eben die Antwort, die ich erwarte, dass sie bei diesem Aufruf vom Server kommt. Soweit so gut. Aber wir hatten schon den Fall, dass meine Klassen nicht mehr funktioniert haben, weil die andere Anwendung ein Major-Update bekommen hat und deswegen ein paar Funktionsbausteine verschoben worden sind. Jetzt würde mein Test durchlaufen, aber im Real-Fall geht er auf die Bretter, weil die erwartete Antwort nicht mehr die echte Antwort ist.
Für einen Fall, wie letzte Woche würde mir reichen, wenn gemockte Tests durchlaufen, aber sollten wir gesagt bekommen, dass eine andere Anwendung ein Update bekommen hat, dann hätte ich gerne die Möglichkeit automatisiert zu prüfen, ob alle meine Klassen dazu noch funktionieren, oder irgendwo anpassungsbedarf ist.
Wie mache ich das in der Praxis?