2017-11-04 1 views
0

Sag mal, habe ich eine Testklasse wieauf die REPL/Armer Mann Debugging-Objekte von Tests verfügbar machen

(ns some-tests) 

(deftest some-test [] 
    ... 
    (let [x (complicated-object ..)] 
     ...)) 

und ich es von einem REPL Sitzung ausgeführt,

(run-tests 'some-tests) 

Wenn der Test scheitert, muss ich oft x inspizieren. Oft hängt (complicate-object ..) von anderen Objekten ab, die davor gebaut wurden, so dass ich nicht einfach x in meiner REPL-Sitzung von Hand erstellen kann.

Daher Ich möchte eine billige Möglichkeit, diese sehr x aus dem tatsächlichen Test in meiner REPL-Sitzung verfügbar machen. Ich habe versucht, es in eine Exception zu verpacken, es zu werfen und es in der REPL zu erfassen, aber der Unit-Test fängt alle Ausnahmen selbst ab.

Hat jemand eine Idee, wie man das macht (kurz vor der Serialisierung des Objekts auf die Festplatte)?

PS: Ich kenne diesen Hack der Einführung von Breakpoints: https://coderwall.com/p/xayyvq/break-point-in-clojure, aber das ist eine neue REPL; nicht meine ursprüngliche REPL.

Antwort

0

Ich habe einen offensichtlichen Weg, dies zu tun, mit einem Atom übersehen.

(ns some-tests) 

(def tmp (atom nil)) 

(deftest some-test [] 
    ... 
    (let [x (complicated-object ..)] 
     (reset! tmp x) 
     ...)) 

Nach diesem Test ausgeführt wird, in der REPL, kann man dann den Wert von x erhalten in

@some-tests.tmp 
0

Warum nicht (def x (kompliziert ...)) außerhalb des Tests?

+0

Das ist, was ich jetzt die meiste Zeit tun. Aber das ist etwas, das immer wieder auftaucht. Ich hätte gerne einen billigen Weg, um ein Objekt, das ich im Rahmen eines Tests habe, in einen anderen Kontext (die REPL) zu bringen. Ich dachte, jemand anderes hätte das herausgefunden. Ansonsten denke ich, dass ich den Code von clojure.test durchgehen muss. –

Verwandte Themen