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.
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:
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>
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!
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
Tags und Links unit-testing functional-programming elixir ex-unit teardown