Elixir / ExUnit: Kontext von Testfall an Teardown / Cleanup-Methode (on_exit) übergeben?

8

Problem

Ich möchte ein Elixir-Modul testen, das mit dem Hostsystem interagiert und über Methoden verfügt, die Nebenwirkungen haben. Für diese Frage und um es kurz zu halten, nehmen wir an, dass es sich um die Erstellung mehrerer Verzeichnisse handelt. Diese Verzeichnisse sollten natürlich gelöscht werden, nachdem die Tests ausgeführt wurden, und auch wenn die Tests (die ziemlich lang sind) aus irgendwelchen Gründen scheitern (schlechter Modulcode, schlechter Testcode, etc.).

Ich würde gerne wissen, wie man diesen Reinigungsschritt am besten / am elegantesten löst. Ich habe die Dokumentation von ExUnit.Callbacks.on_exit / 2 angeschaut, aber die Beispiele sind nur für die Einrichtung und einfach Teardown (kein passender Zustand). Ich habe auch online gesucht, aber nichts nützliches gefunden, so könnte es sein, dass meine Idee selbst nicht gut ist - ich bin auch offen für Vorschläge, das Problem neu zu gestalten.

Beispiel

%Vor%

Mögliche Lösungen?

Ich möchte nun einen Aufruf von cleanup/1 mit einer Liste von Verzeichnissen hinzufügen, die nach jedem Test gelöscht werden sollen. Die folgenden Ideen sind Dinge, die ich ausprobiert habe:

  • Aufruf der Funktion direkt am Ende jedes Tests: funktioniert in einfachen Fällen, aber wenn der Testfall endlos wiederholt wird, wird er gelöscht und die Bereinigung findet nicht mehr statt.
  • Aufruf von on_exit(fn -> cleanup(context) end) mit aktualisiertem Kontext in jedem Test: das scheint zu funktionieren, aber ich konnte nicht herausfinden, ob es empfohlen wird und ob es einen Unterschied macht, wo der Aufruf in den Test (Anfang / Ende) eingefügt wird / li>
  • Aufruf von on_exit(fn -> cleanup(context) end) in der Funktion setup context : Die Dokumentation tut dies, aber ich weiß nicht, wie ich einen neuen Status / Kontext an sie übergeben soll. Es scheint nur nützlich zu sein, wenn der gesamte Kontext in den Setup-Funktionen bereits vollständig definiert ist.

Vielleicht überlege ich auch dieses Problem ... Ich hatte nur einige schlechte Debugging-Erfahrungen mit unvollständiger Bereinigung und daraus resultierender endloser Rekursion (die eigentlich von meinem Code erfasst worden sein sollte, aber noch nicht war), also möchte ich nur sicherstellen Ich mache das Richtige und lerne es richtig. Abgesehen von diesen Tests ist Elixir bisher eine sehr angenehme und makellose Erfahrung!

    
user493184 06.03.2017, 11:04
quelle

1 Antwort

1

In diesem speziellen Fall würde ich nur den on_exit Callback in Ihrer Setup-Funktion (Ihre dritte Lösung) registrieren.

Löschen Sie nicht die Pfade einzeln, sondern löschen Sie das übergeordnete Verzeichnis:

%Vor%

Und dann @test_dir als Basisverzeichnis in Ihren Tests verwenden

    
leifg 22.08.2017 13:25
quelle