Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Unit testing 莱宁根测试_Unit Testing_Clojure_Leiningen - Fatal编程技术网

Unit testing 莱宁根测试

Unit testing 莱宁根测试,unit-testing,clojure,leiningen,Unit Testing,Clojure,Leiningen,我正在使用leiningen编写一个小型Clojure项目,其目录结构如下: project + src + org/example/project/core.clj + test + org/example/project/core.clj 当我运行lein test时,它报告说它运行了0个测试,0个失败,但我故意在test/../core.clj文件中放置了一个设计为失败的测试 我将行:test path test添加到我的project.clj文件中,当我重新运行时,得到错误:

我正在使用leiningen编写一个小型Clojure项目,其目录结构如下:

project
+ src
  + org/example/project/core.clj
+ test
  + org/example/project/core.clj
当我运行
lein test
时,它报告说它运行了0个测试,0个失败,但我故意在test/../core.clj文件中放置了一个设计为失败的测试

我将行
:test path test
添加到我的
project.clj
文件中,当我重新运行时,得到错误:

Exception in thread "main" java.lang.IllegalArgumentException: No implementation of method: :as-file of protocol: #'clojure.java.io/Coercions found for class: clojure.lang.Symbol (NO_SOURCE_FILE:0)
    at clojure.lang.Compiler.eval(Compiler.java:5440)
    at clojure.lang.Compiler.eval(Compiler.java:5391)
    at clojure.core$eval.invoke(core.clj:2382)
    at clojure.main$eval_opt.invoke(main.clj:235)
    at clojure.main$initialize.invoke(main.clj:254)
    at clojure.main$script_opt.invoke(main.clj:270)
    at clojure.main$main.doInvoke(main.clj:354)
    at clojure.lang.RestFn.invoke(RestFn.java:458)
    at clojure.lang.Var.invoke(Var.java:377)
    at clojure.lang.AFn.applyToHelper(AFn.java:174)
    at clojure.lang.Var.applyTo(Var.java:482)
    at clojure.main.main(main.java:37)
Caused by: java.lang.IllegalArgumentException: No implementation of method: :as-file of protocol: #'clojure.java.io/Coercions found for class: clojure.lang.Symbol
    at clojure.core$_cache_protocol_fn.invoke(core_deftype.clj:471)
    at clojure.java.io$fn__7328$G__7323__7333.invoke(io.clj:34)
    at clojure.java.io$file.invoke(io.clj:401)
    at leiningen.util.ns$namespaces_in_dir.invoke(ns.clj:38)
    at leiningen.test$test.doInvoke(test.clj:45)
    at clojure.lang.RestFn.invoke(RestFn.java:411)
    at clojure.lang.Var.invoke(Var.java:365)
    at clojure.lang.AFn.applyToHelper(AFn.java:163)
    at clojure.lang.Var.applyTo(Var.java:482)
    at clojure.core$apply.invoke(core.clj:542)
    at leiningen.core$apply_task.invoke(core.clj:156)
    at leiningen.core$_main.doInvoke(core.clj:212)
    at clojure.lang.RestFn.applyTo(RestFn.java:138)
    at clojure.core$apply.invoke(core.clj:540)
    at leiningen.core$_main.invoke(core.clj:217)
    at user$eval167.invoke(NO_SOURCE_FILE:1)
    at clojure.lang.Compiler.eval(Compiler.java:5424)
    ... 11 more
我正在运行Clojure 1.2和最新的lein(1.3.1)


clojure.core或lein代码似乎有问题。

源布局。我认为您基本上使用真实的core.clj文件来隐藏测试。这可能就是为什么
clojure.test
找不到任何测试的原因。是否尝试了其他名称空间和文件名?例如,
test/example/project/test\u core.clj

也有同样的问题。 过了一会儿,我注意到leins的默认测试路径是:

test/{project-name}/test/{file-under-test}.clj
                    ^^^^

请注意路径中有一个额外的
test
目录。

您的命名空间是否与文件夹匹配?这很有效。我觉得名字不重要。文件和名称空间现在是
test\u core
@Ralph:src和test不是名称空间的一部分。在clojure过程中,这两个文件基本上看起来是相同的。因此,将使用第一个找到的。最好使用“lein new”或与从中获得的结构匹配来创建项目。@technomancy–镜像在src下进行的更改(例如重命名文件/命名空间)以进行测试(反之亦然),这一点也很重要。我已经将core.clj重命名为web.clj,直到现在才考虑重命名相应的测试文件。