Wo kann man einen nicht bestandenen Test durchsetzen?

15

Ich habe gerade die Zweigeinstellungen in meinem GitHub-Repository geändert, sodass mein [nächster] Zweig einen übergebenen CI-Build durch eine Pull-Anfrage erfordert.

Es folgte eine Diskussion mit einigen Teammitgliedern über nicht bestandene Tests.

Um des Kontexts willen ...

Das Repository verfügt über einen [master] -Zweig, in den nur bei einem Release PR geschrieben wird. Daher enthält [master] den Code ab dem letzten Release, unabhängig davon, ob es sich um einen Major, einen Minor, einen Hotfix, eine Beta oder ein Alpha handelt. Pre-Release Build.

Der [nächste] Zweig ist der "Standard" Zweig, in dem wir den "release-ready" Code behalten wollen . Technisch gesehen kann dieser Zweig jederzeit in [master] aufgenommen und freigegeben werden.

Einzelne Gabeln haben ihre eigenen Entwicklerzweige und PR-Mitarbeiter für [next].

Wenn ich eine nicht triviale PR überprüfe, füge ich den Entwicklerzweig des Mitwirkenden in meinen "Überprüfungszweig" ein. Wenn ich Dinge sehe, die ich schnell beheben kann, werde ich Änderungen und neue (manchmal fehlgeschlagene) Tests und PR festschreiben / pushen zurück in den Entwicklerzweig des Mitwirkenden; Wenn sie meine Änderungen in zusammenführen, lassen Sie die neuen fehlgeschlagenen Tests bestehen und drücken Sie dann, um die PR zu synchronisieren. Anschließend füge ich die PR in [next] zusammen.

Bei dieser Frage geht es jedoch nicht um das Bestehen von Tests, sondern um die nicht bestandenen .


Fehlgeschlagene Tests dokumentieren, was behoben werden muss.

Bekannte Fehler sollten für Tests geschrieben sein, damit wir wissen, was nicht funktioniert.

Technisch macht das auch die GitHub- Issues- Liste (gefiltert nach und / oder Labels ). Ist es eine gute Praxis, auch eine Reihe von fehlgeschlagenen Tests durchzuführen, um Fehler zu dokumentieren?

Ein fehlgeschlagener Build auf [next] würde bedeuten, dass wir nicht bereit für die Veröffentlichung sind ... aber dann ist "bereit für die Veröffentlichung zu sein" ein bisschen wie "bereit zu sein", Kinder zu haben - dafür bist du nie ganz bereit und Irgendetwas (von variabler Wichtigkeit) wird mit der Veröffentlichung unvermeidlich schief gehen.


Wir drängen also immer nur darauf, die Tests zu bestehen. Wo kann man dann fehlgeschlagene Tests hinschieben? Ich meine, außerhalb des PR / Review-Prozesses?

Zum Beispiel meldet ein Benutzer einen neuen Fehler in der Problemliste und ich möchte eine fehlerhafte Testsuite dafür schreiben, um anzugeben, was getan werden muss und wo, was es für neue Mitwirkende einfacher macht, ihn zu finden und schließlich PR ein Update.

Wo soll ich diese fehlgeschlagenen Tests durchsetzen? Oder ist es überhaupt eine gute Idee, fehlgeschlagene Tests irgendwo hinzuschieben?

Mathieu Guindon
quelle
@ PhilipKendall guter Punkt! Wir optimieren noch immer unseren Prozess. Ich mag es nicht, wie VS Tests mit "nicht eindeutigen" Tests kombiniert "ignoriert". Wenn einer der Tests auf niedrigerer Ebene fehlschlägt, wollen wir nicht, dass die Hälfte der Tests fehlschlägt. Deshalb machen wir sie nicht eindeutig, wenn die Voraussetzungen nicht erfüllt sind ; Dies führt dazu, dass Tests aus den richtigen Gründen einen Fehler melden und "nicht schlüssig" sind, wenn sie nicht testen können, für was sie geschrieben wurden. Wir haben nicht mehr viele davon, daher könnte es eine Option sein, sie zu ignorieren . Aber ist es dann ein Fehlschlag, wenn sie ignoriert werden ?
Mathieu Guindon
Warum müssen Sie im Rahmen des Überprüfungsprozesses Code schreiben? Wenn Sie einen Fehler sehen, kommentieren Sie dies in der PR und lehnen optional die PR ab.
James
@James gut, ich schreibe gerne Code. Abgesehen davon, dass immer mehr Mitwirkende mitmachen, mache ich immer mehr GitHub-Wartungs- und PR-Arbeiten als das eigentliche Coding!
Mathieu Guindon

Antworten:

12

In dieser Situation würde ich die fehlgeschlagenen Tests als "ignoriert" markieren. Auf diese Weise verfügen Sie weiterhin über den Test, damit Sie wissen, was Sie in Zukunft beheben müssen, aber Sie werden nicht mit fehlerhaften Builds enden .

Wenn Sie außerdem jeden Test mit der Referenz für die Problemverfolgung versehen, um das Problem zu beheben, können Sie die Dinge auf einfache Weise miteinander verknüpfen.

Philip Kendall
quelle
5

Vollständige Offenlegung: Ich bin einer der Teilnehmer an der Diskussion.

Der Hauptzweig des Repositorys ist nicht der Hauptzweig. Der Zusammenschluss zum Master dient keinem "eigentlichen Zweck", und dieser Zweig tut nichts, was ein Zweig tun sollte (nämlich sich bewegen ).
Sie missbrauchen diesen Zweig als Tag für die neueste Version.

Verwenden Sie anstelle eines Zweigs ein Tag. Wenn Sie freigeben möchten, führen Sie die erforderlichen Schritte in einem "Freigabezweig" aus, genau wie in einem Zweig "Thema". Dann fügst du das in [next] ein und versiehst es mit einem Tag.

Die Rolle, die [der Nächste] erfüllt, ist die eines Master-Zweigs. Da geht nur releasefähiger Code rein. Alles andere wäre ein [Entwicklungs-] Zweig. Ein Entwicklungszweig enthält zu stabilisierende Arbeiten . Dies bedeutet: Entfernen Sie [master], verwenden Sie [next] wie zuvor und erstellen Sie einen weiteren Zweig für "weniger stabile" Arbeiten.

Da es eher die Ausnahme als die Regel ist, dass es fehlgeschlagene Tests geben muss, die an ausstehende Fehler erinnern, sollte es kein allzu großes Problem sein, diesen weniger stabilen Zweig nach Bedarf zu erstellen und zu zerstören

Vogel612
quelle
1
Wenn Sie die neueste Version in [master] haben, können Sie die letzte Version problemlos abzweigen, um einen Hotfix zu erstellen. dann kann der hotfix in [next] und von dort in jeden dev branch PR-geschrieben werden .. oder fehlt mir etwas?
Mathieu Guindon
2
Sie können gerade git checkout -b HotFix ReleaseTag(das ist, wenn ich mich an den Zweig erinnere, der Prüfung Syntax richtig verursacht). Dies sollte eine HotFix-Verzweigung vom
ReleaseTag