2017-11-04 10 views
0

말을 사용할 테스트에서 개체를 확인, 나는REPL/가난한 사람의 디버깅

(ns some-tests) 

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

같은 테스트 클래스를하고 난

(run-tests 'some-tests) 

때 테스트를 사용하여 REPL 세션에서 실행 실패, 나는 종종 x를 검사해야합니다. (복잡한 객체 ..) 종종 전에 만들어진 다른 객체에 의존하기 때문에 손으로 REPL 세션에서 x를 쉽게 만들 수 없습니다.

그러므로 REPL 세션에서 사용할 수있는 실제 테스트에서이 x를 만들려면 저렴한 방법이 필요합니다. 나는 이것을 예외로 랩핑 (wrapping)하여 던지고 그것을 REPL에서 잡으려고 시도했다. 그러나 유닛 테스트는 모든 예외를 잡았다.

누군가가이 작업을 수행하는 방법을 알고 있습니까 (객체를 디스크에 직렬화하지 않은 것)?

PS : 제가 도입 중단이 해킹을 알고 : https://coderwall.com/p/xayyvq/break-point-in-clojure, 그러나 이것은 새로운 REPL이다; 내 원래의 REPL이 아닙니다.

답변

0

나는 원자와 함께 이것을 명백하게하는 방법을 간과했다.

(ns some-tests) 

(def tmp (atom nil)) 

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

이 테스트를 실행 한 후, REPL에, 하나는 지금은 대부분의 시간을 무엇을 즉

@some-tests.tmp 
0

왜 테스트 외부에서 (def x (복잡 ...))하지 않습니까?

+0

에서 x의 값을 얻을 수 있습니다. 하지만 이것은 계속해서 반복되는 내용입니다. 따라서 다른 컨텍스트 (REPL)에 대한 테스트 환경에서 가지고있는 객체를 얻을 수있는 저렴한 방법을 원합니다. 나는 다른 누군가가 이것을 알아 냈음에 틀림 없다고 생각했다. 그렇지 않으면 나는 clojure.test의 코드를 검토해야만한다고 생각한다. –