[英]Test clojure instance in deftest
I want to check if the right instance is used. 我想检查是否使用了正确的实例。
But while the repl gives me true, the actual test returns nil. 但是,虽然repl给了我true,但实际测试返回nil。 Idk why 为什么
(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
The command lein test
gives me: lein test
命令给我:
FAIL in (queue-type-test) (queue_test.clj:6) expected: (instance? clojure.lang.PersistentQueue (clojure.core/deref sut/queue)) actual: nil
I know the test itself is not really useful, but I can't figure out why this behaves like this. 我知道测试本身并没有真正的用处,但我不知道为什么会这样。
tl;dr: both is
and @
are macros. tl; dr: is
和@
都是宏。 Most obvious fix would be something like: 最明显的解决方法是:
(deftest queue-type-test
(let [queue @sut/queue]
(is (instance? clojure.lang.PersistentQueue queue)))
clojure.test
docs don't make it immediately obvious, but is
is a pretty tricky macro that looks inside its body. clojure.test
文档不会立即使它变得显而易见,但是is
是一个看起来非常棘手的宏,它看起来在其内部。 Here's a snippet from the docstring: 这是文档字符串的摘录:
user> (is (= 5 (+ 2 2)))
FAIL in (:1)
expected: (= 5 (+ 2 2))
actual: (not (= 5 4))
false
Notice actual: (not (= 5 4))
. 注意actual: (not (= 5 4))
。 It's clear that it did not evaluate =
so that it can show us the result of (+ 2 2)
. 显然,它没有评估=
因此它可以向我们显示(+ 2 2)
。 Here are all the special cases for assert-expr
multimethod. 这是assert-expr
多方法的所有特殊情况。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.