clojure测试用例断言是失败的

时间:2016-10-08 07:53:07

标签: unit-testing clojure assertions

我的源代码中有一个简单的函数hello

(defn hello [n] (str "Hello" n))

在测试用例中,我调用hello函数。但似乎它正在返回nil。测试用例:

(deftest test    (testing "string"
    ;(is (= "Hello x" (ql/hello "x")))))
    (is (= (ql/hello "x") "Hello x"))))

我收到以下错误。

expected: (= (ql/hello "x") "Hello x")
  actual: (not (= nil "Hello x"))

为什么要归还nil?如果我从repl调用hello函数,我得到" Hello x"接下来是nil,但我认为这是由于重新正确吗?当我从另一个函数调用hello时,它不应该返回字符串吗?我直接从repl运行测试用例而不是使用lein。

1 个答案:

答案 0 :(得分:3)

根据您的描述,您的实际hello函数似乎定义为:

(defn hello [n]
  (println "Hello" n))

当您运行(hello "x")时,它会将Hello x打印到控制台并返回nil(这是println的行为)。

要让您的测试通过,您需要在REPL中重新定义您的功能,使其与str而不是println的版本相匹配。

boot.user=> (require '[clojure.test :refer :all])
nil
boot.user=> (defn hello [n]
       #_=>   (println "Hello" n))
#'boot.user/hello
boot.user=> (is (= "Hello x" (hello "x")))
Hello x

FAIL in () (boot.user5664236129068656247.clj:1)
expected: (= "Hello x" (hello "x"))
  actual: (not (= "Hello x" nil))
false
boot.user=> (defn hello [n]
       #_=>   (str "Hello " n))
#'boot.user/hello
boot.user=> (is (= "Hello x" (hello "x")))
true
boot.user=>