Leiningen无法找到额外测试文件(CIDER可正常运行)——求助
解决
lein test无法运行测试的问题 问题根源
Clojure严格遵循命名空间与文件路径的映射规则:
- 命名空间中的连字符
-,对应文件/目录名里的下划线_ - 文件/目录名里的下划线
_,对应命名空间中的连字符- - 目录结构直接对应命名空间的层级(用
.分隔)
你的测试文件test/stack_machine/sm_test.clj的命名空间是sm-test,既没有对应父目录stack_machine的命名空间部分,也不符合路径与命名空间的映射规则,导致Lein无法正确找到该文件对应的命名空间。CIDER能运行是因为它已在编辑器中直接加载了文件,不依赖路径与命名空间的严格映射。
修复步骤
1. 修正测试文件的命名空间
打开test/stack_machine/sm_test.clj,将命名空间从sm-test改为stack-machine.sm-test:
(ns stack-machine.sm-test ;; 修正后的命名空间,对应目录stack_machine和文件sm_test.clj (:use [stack-machine.stack]) (:require [clojure.test :as t])) (t/deftest test-test-itself (t/testing "tests in the namespace 'stack machine.'" (t/is (== 1 1.0))))
2. 验证映射规则
确认命名空间与文件路径的对应关系:
- 目录
test/stack_machine→ 命名空间前缀stack-machine(下划线_转连字符-) - 文件
sm_test.clj→ 命名空间后缀sm-test(下划线_转连字符-) - 完整命名空间
stack-machine.sm-test完全匹配test/stack_machine/sm_test.clj的路径
3. 运行测试
现在执行lein test,Lein就能正确找到并运行该测试命名空间。如果需要单独运行这个测试,可执行:
lein test stack-machine.sm-test
内容的提问来源于stack exchange,提问作者Reb.Cabin
相关产品推荐
相关产品推荐

