我的源代码中有一个简单的函数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。
答案 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=>