7
Ich möchte Komponententests für Funktionen schreiben, die als private defn- definiert sind. Wie kann ich das machen?Wie kann ich Komponententests für private clojure-Funktionen schreiben?
Ich möchte Komponententests für Funktionen schreiben, die als private defn- definiert sind. Wie kann ich das machen?Wie kann ich Komponententests für private clojure-Funktionen schreiben?
Es stellt sich heraus, dass Sie das Lesemakro # 'oder var verwenden können, um auf die zu testende private Funktion zu verweisen. Wenn die private Funktion im Namensraum ab und hat den Namen c:
(ns a.b-test
(:use
[clojure test]))
(deftest a-private-function-test
(testing "a private function"
(let [fun #'a.b/c]
(is (not (fun nil))))))
Mit der Syntax '#' ab/d' ist eine Abkürzung für '(var ab/d)', mit Rückkehr des "var" der zeigt auf die "Funktion" 'ab/d'. Wenn Clojure die Variable sieht, ersetzt sie automatisch die Funktion vor der Auswertung. Ich fand dieses (meist undokumentierte) Verhalten für einige Jahre ziemlich verwirrend. –
@AlanThompson Huh, sieht aus wie 'clojure.lang.Var' implementiert' IFn'. Das wusste ich nicht. Ich nehme an, es macht eine gewisse Menge Sinn .... –
Art von traurig, privat wurde in clojure wie das geflickt – matanster