使用可用于REPL / Poor man调试的测试对象

时间:2017-11-04 18:43:20

标签: clojure

说,我有一个像

这样的测试类
(ns some-tests)

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

我使用

从REPL会话中运行它
(run-tests 'some-tests)

当测试失败时,我经常需要检查x。 通常,(complex-object ..)依赖于之前构建的其他对象,因此我无法手动在REPL会话中轻松创建x。

因此,我想用一种廉价的方法从我在REPL会话中可用的实际测试中创建这个x。我尝试将它包装在Exception中,抛出它并在REPL中捕获它,但是单元测试本身就能捕获所有异常。

有人知道如何做到这一点(没有将对象序列化为磁盘)?

PS:我知道引入断点的黑客行为: https://coderwall.com/p/xayyvq/break-point-in-clojure, 但这是一个新的REPL;不是我原来的REPL。

2 个答案:

答案 0 :(得分:0)

为什么不在测试之外(def x(复杂...))?

答案 1 :(得分:0)

我忽略了使用原子做这个的明显方法。

(ns some-tests)

(def tmp (atom nil))

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

运行此测试后,在REPL中,可以在

中获取x的值
@some-tests.tmp