Testen im Emacs-Lisp-Track

Lerne, wie du deine Emacs-Lisp-Übungen auf Exercism testest


Elisp-Tests werden mit ERT ausgeführt, einer Emacs-Lisp-Bibliothek für Regressions- und Unit-Tests. Es gibt mehrere Möglichkeiten, die Tests auszuführen.

So führst du die Tests interaktiv in Emacs aus:

  1. Öffne die Testdatei, M-x eval-buffer RET
  2. Interaktiv und einzeln, mit M-x ert RET test-name RET
  3. Interaktiv und alle auf einmal, mit M-x ert RET t RET Beachte, dass damit alle Tests ausgeführt werden, die gerade in Emacs geladen sind!
  4. Führe M-x eval-buffer RET erneut aus, bevor du testest, wenn du Änderungen vorgenommen hast

Wenn du nur die Tests im aktuellen Buffer ausführen willst, kannst du Folgendes in deine .emacs oder init.el einfügen:

(defun my-eval-and-run-all-tests-in-buffer ()
  "Delete all loaded tests from the runtime, evaluate the current buffer and run all loaded tests with ert."
  (interactive)
  (ert-delete-all-tests)
  (eval-buffer)
  (ert 't))

Nachdem du Emacs neu gestartet hast:

  1. Öffne die Testdatei
  2. M-x my-eval-and-run-all-tests-in-buffer RET

Interaktives Testen ist super, während du an einer Übung arbeitest. Wenn du aber prüfen willst, ob eine Übung bereit zur Abgabe ist, ist der Batch-Modus die bessere Wahl.

Um alle Tests im Batch-Modus vom Terminal auszuführen, führe emacs -batch -l ert -l *-test.el -f ert-run-tests-batch-and-exit aus.

Der obige Befehl ist etwas unhandlich. Wenn du magst:

  1. Lege eine Datei in deinem $PATH an (wahrscheinlich in ~/bin) namens ert-run
  2. Der Inhalt der Datei sollte so aussehen:
    #!/usr/bin/env sh
    emacs -batch -l ert -l $1 -f ert-run-tests-batch-and-exit
    
  3. Mache die Datei mit chmod +x ert-run ausführbar

Du solltest einfach ert-run *-test.el aufrufen können, um die Tests im Batch-Modus laufen zu lassen.

Weitere Optionen findest du in der Dokumentation, C-h i m ert RET.

An Übungen arbeiten

Da Emacs selbst ein Elisp-Interpreter ist, läuft dein Code immer in seiner nativen Ausführungsumgebung. Du kannst jede Form auswerten, indem du am Ende der Form C-x e drückst, oder eine Auswahl mit M-x eval-region oder den ganzen Buffer mit M-x eval-buffer. Das ist extrem nützlich, um deinen Code schnell zu debuggen.

Tipps

Da sowohl dein Code als auch die Tests gültiges Elisp sind, empfiehlt es sich, deinen Übungscode in einem Buffer-Fenster neben dem zugehörigen Test anzuzeigen, so wie hier:

Screenshot, der Emacs mit einem vertikal in zwei Fenster geteilten Frame zeigt

Teile den Frame mit C-x 3 vertikal, wechsle mit C-x o in das neue Fenster und öffne die Datei mit C-x C-f /path/to/file.