在deftest中测试clojure实例
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在deftest中测试clojure实例相关的知识,希望对你有一定的参考价值。
我想检查是否使用了正确的实例。 但是当repl给我真实时,实际测试返回nil。 Idk为什么
(ns my-app.queue)
(def queue (atom clojure.lang.PersistentQueue/EMPTY))
(ns my-app.queue-test
(:require [my-app.queue :as sut]
[clojure.test :refer :all]))
(deftest queue-type-test
(is (instance? clojure.lang.PersistentQueue @sut/queue)))
;repl output
;(instance? clojure.lang.PersistentQueue @sut/queue) ;=> true
命令lein test
给了我:
FAIL in (queue-type-test) (queue_test.clj:6)
expected: (instance? clojure.lang.PersistentQueue (clojure.core/deref sut/queue))
actual: nil
我知道测试本身并不是很有用,但我无法弄清楚为什么它会像这样。
答案
tl; dr:is
和@
都是宏。最明显的修复方式如下:
(deftest queue-type-test
(let [queue @sut/queue]
(is (instance? clojure.lang.PersistentQueue queue)))
clojure.test
文档并没有立即显而易见,但is
是一个非常棘手的宏观,它看起来在它的身体内部。这是docstring的一个片段:
user> (is (= 5 (+ 2 2)))
FAIL in (:1)
expected: (= 5 (+ 2 2))
actual: (not (= 5 4))
false
注意actual: (not (= 5 4))
。很明显,它没有评估=
,以便它可以向我们展示(+ 2 2)
的结果。 Here是assert-expr
多方法的所有特例。
以上是关于在deftest中测试clojure实例的主要内容,如果未能解决你的问题,请参考以下文章