我是Clojure的新手,现在我正在尝试使用一些单元测试。
我有一个具有这种结构的示例项目:
src / hello中的core.clj包含
(ns hello.core
(:gen-class))
(defn side-eq [x]
(if (< 0 (count x))
(= (.charAt x 0) (.charAt x (- (count x) 1)))
false))
test / hello中的core.clj包含
(ns hello.core
(:use clojure.test)
(:require [hello.core :refer :all])
(:gen-class))
(use 'clojure.test)
(deftest side-eq-tests (
is (= false (side-eq "aws"))))
(run-tests)
当我执行测试时,它会抛出
java.lang.RuntimeException:无法在此上下文中解析符号:side-eq
当我测试像
这样的东西时is (= 1 1)
然后一切正常。
发生了什么事?
答案 0 :(得分:2)
您不应该有多个具有相同命名空间的文件。将测试重命名为其他内容。此处的惯用名称为hello.core-test
<{1}}
答案 1 :(得分:0)
我更喜欢的变体是使用tst.*
前缀开始所有测试名称空间,这避免了连字符 - 下划线转换&amp;混淆(例如demo.core-test
vs demo.core_test.clj
。所以你的文件是这样的:
> d **/*.clj
-rwxrwxr-x 1 alan alan 1024 Jan 5 19:00 project.clj*
-rwxrwxr-x 1 alan alan 84 Jan 5 15:29 src/demo/core.clj*
-rwxrwxr-x 1 alan alan 248 Jan 7 12:42 test/tst/demo/core.clj*
代码如下:
(ns demo.core)
(defn -main []
(println "main - enter")
)
和
(ns tst.demo.core
(:use demo.core tupelo.core tupelo.test)
(:require
[tupelo.misc :as tm] ))
....