当我测试自己的函数时,Clojure中的Unittest无法编译

时间:2018-01-06 15:59:56

标签: unit-testing clojure

我是Clojure的新手,现在我正在尝试使用一些单元测试。

我有一个具有这种结构的示例项目:

structure of my sample project

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)

然后一切正常。

发生了什么事?

2 个答案:

答案 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] ))

....