ano*_*245 34 clojure leiningen
作为clojure的新手,我使用leiningen创建了一个示例项目
lein new app first-project
Run Code Online (Sandbox Code Playgroud)
这给了我这个目录
.
??? doc
? ??? intro.md
??? LICENSE
??? project.clj
??? README.md
??? resources
??? src
? ??? first_project
? ??? core.clj
??? target
? ??? repl
? ??? classes
? ??? stale
? ??? extract-native.dependencies
??? test
??? first_project
??? core_test.clj
Run Code Online (Sandbox Code Playgroud)
在不修改任何文件的情况下,我可以成功地完成唯一的失败测试
lein test
...
Ran 1 tests containing 1 assertions.
1 failures, 0 errors.
Tests failed.
Run Code Online (Sandbox Code Playgroud)
但是我无法使用运行测试从REPL做同样的事情
lein repl
first-project.core=> (use 'clojure.test)
nil
first-project.core=> (run-tests)
Testing first-project.core
Ran 0 tests containing 0 assertions.
0 failures, 0 errors.
{:type :summary, :pass 0, :test 0, :error 0, :fail 0}
Run Code Online (Sandbox Code Playgroud)
我试过(但不行)
(require 'first-project.core-test)
Run Code Online (Sandbox Code Playgroud)
Dav*_* J. 61
用lein repl,启动REPL ,然后:
(require '[clojure.test :refer [run-tests]])
(require 'your-ns.example-test :reload-all)
(run-tests 'your-ns.example-test)
Run Code Online (Sandbox Code Playgroud)
我更喜欢留在user命名空间中,而不是in-ns像另一个答案所提到的那样改变命名空间.相反,将名称空间作为参数传递给run-tests(如上所示).
我也建议远离(use 'clojure.test); 这就是我(require '[clojure.test :refer [run-tests]])上面建议的原因.有关更多背景信息,请阅读http://dev.clojure.org/jira/browse/CLJ-879
Art*_*ldt 16
在上面的示例中,repl位于错误的命名空间中.如果将repl切换到core_test命名空间,它可能会更好.然后跑(run-tests).
(in-ns 'first-project.core-test)
(run-tests)
Run Code Online (Sandbox Code Playgroud)
开发测试的另一种有趣方式是从REPL运行它们直到它们工作,因为测试是带有一些额外元数据的普通函数.
(in-ns 'first-project.core-test)
(my-test)
Run Code Online (Sandbox Code Playgroud)
记住你除了打电话之外还要加载文件in-ns 让我们说你的测试文件是tests/first_project/core_test.clj,然后你需要打电话
(load "tests/first_project/core_test")
(in-ns 'first-project.core-test)
(my-test)
Run Code Online (Sandbox Code Playgroud)
请记住,_在文件系统中成为-命名空间并/成为..