Clojure使用别名运行测试失败:无法定位测试类路径问题求助
问题原因及解决办法
核心原因
你在deps.edn的:test别名配置中,使用了斜杠分隔的符号clacks/core-test引用命名空间,但Clojure中命名空间的标准分隔符是点(.),斜杠只是符号中的普通字符,这导致Clojure无法正确解析嵌套命名空间,进而找不到对应的测试文件。错误信息里提到找不到core_test相关文件,正是因为斜杠写法让Clojure错误地尝试加载顶级命名空间core_test,而非clacks.core-test。
具体修复步骤
- 修正
deps.edn中的命名空间引用
将:main-opts里的表达式改为点分隔的命名空间符号:
{:paths ["src"] :aliases { :test {:extra-paths ["test"] :main-opts ["-e" "(require 'clacks.core-test) (clojure.test/run-tests 'clacks.core-test)"]}}}
- 移除测试文件中多余的
run-test调用
你的core_test.clj最后一行的(run-test alphabet-test)是多余的——clojure.test/run-tests会自动运行目标命名空间下的所有测试,且run-test需要传递测试var(如#'alphabet-test)而非符号,建议删除该行避免混淆。
修正后的core_test.clj:
(ns clacks.core-test (:require [clojure.test :refer [deftest is testing]] [clacks.core :refer [alphabet]])) (deftest alphabet-test (testing "Testing the alphabet" (is (map? alphabet) "Not a map!") (is (seq alphabet))))
- 验证类路径(可选)
若问题仍存在,执行以下命令检查test目录是否被正确添加到类路径:
clj -M:test -Spath
输出结果中应包含你的本地test目录路径。
补充说明
Clojure命名空间与文件的映射规则:
- 命名空间中的点(
.)对应文件系统的目录分隔符 - 命名空间中的连字符(
-)对应文件名中的下划线(_)
你的目录结构和文件名完全符合规则,问题仅出在命名空间的引用写法上。
内容的提问来源于stack exchange,提问作者bugsyb
相关产品推荐
相关产品推荐

