Unit Tests in Clojure (und Leiningen)


Damit es hier nicht zu weichspülerartig mit Videos weiter geht, kommt noch was für die Clojure-Leute. :-) Ich will langsam mit den Unit Tests für Clojure anfangen und hab dazu 3 sehr einfache Funktionen definiert. Dazu eine Datei mit einigen einfachen Unit Tests. Das ganze kann man mit Leiningen sehr einfach ausführen:

$ lein test
Testing clj-testtest.test.core
Ran 7 tests containing 7 assertions.
0 failures, 0 errors.

Hier ist der Code:

src/core.clj

(ns clj-testtest.core)

(defn foo
  [a b] (str a":" b))

(defmacro mfoo
  [a b] `(str ~a":" ~b))

(defn gen-foo
  [a b c] (defn a [b c] (str b":" c)))

test/core.clj

(ns clj-testtest.test.core
  (:use [clj-testtest.core] :reload)
  (:use [clojure.test]))

(deftest test-simple
  (is (not (= 5 (+ 2 2)))))

(deftest test-foo
  (is (="a:b" (foo 'a 'b))))
(deftest test-foo-numbers
  (is (="5:7" (foo 5 7))))
(deftest test-foo-strings
  (is (="eins:zwei" (foo"eins""zwei"))))
(deftest test-foo-broken
  (is (not (="eins:zwei" (foo"eins" 7)))))

(deftest test-mfoo
  (is (="a:b" (mfoo 'a 'b))))

(deftest test-genfoo
  (is (= (foo 'a 'b) ((gen-foo 'foo 'a 'b) 'a 'b))))

Die Funktion test-simple in Zeile 5 hab ich nur zum Test eingebaut, weil ich mir erst nicht sicher war, wie sich die Unit Tests verhalten. Aber nachdem ich die ersten Unsicherheiten mit (is (not (usw usf))) überwunden hatte, war der Rest ein Kinderspiel... oder so ähnlich. :-)

Der interessante Test ist in Zeile 21 zu sehen: Ich teste, ob die Funktion gen-foo eine Funktion zurückgibt, die eine Ausgabe identisch zur vorher definierten und getesten Funktion foo liefert.

Und es klappt. Jetzt: Bett. ;-)

PS: Alle Quelltexte könnt ihr als Gist runterladen oder clonen.

PPS: Ausserdem gibt es jetzt ein ganzes Repository mit meinen Beispielen zu Unit Tests in Clojure.

Weitere Artikel

Der letzte PR

Fahrrad geklaut

Erstes Review des Sony XZ Premium

Unterschiedliche Sichtweisen

Vorbestellt: Sony Xperia XZ Premium

Giants Run 2017

Gelesen: SciFi Serie 'The Expanse'

Neue Tastatur: Pok3r Vortex RGB

New minecraft survival mod for 1.11.2

Änderungen beim Flug mit Quadkoptern