Clojure运行测试文件报找不到doppelkopf.src.core异常排查
问题根因
报错由类路径规则、namespace写法、文件存放路径三者不匹配导致:
- 你的
deps.edn中配置:paths ["src" "test"],代表Clojure会直接把项目根目录下的src、test两个文件夹作为类加载根目录,这两个文件夹的名称本身不会作为namespace的组成部分。 - 测试文件中写的
[doppelkopf.src.core :refer :all],相当于要求Clojure去类路径根下查找doppelkopf/src/core.clj文件,但类路径根本身就是src目录,自然找不到对应文件,直接抛出文件不存在的异常。 - 现有文件存放位置不符合Clojure的路径映射规则:namespace的每一段对应类路径根下的一层目录,namespace的最后一段对应文件名(namespace中的横杠会自动映射为文件名的下划线)。
修复方法
按以下步骤调整即可解决问题:
- 调整源码目录结构:在
src目录下新建doppelkopf子文件夹,将原放在src/路径下的core.clj移动到src/doppelkopf/路径下,core.clj的ns声明统一写为(ns doppelkopf.core) - 调整测试目录结构:在
test目录下新建doppelkopf子文件夹,将原放在test/路径下的测试文件移动到test/doppelkopf/路径下,测试文件重命名为core_test.clj(匹配namespace中的core-test段) - 修改测试文件的依赖引入:将错误的
[doppelkopf.src.core :refer :all]替换为[doppelkopf.core :refer :all]
调整完成后,项目的标准目录结构如下:
doppelkopf/ # 项目根目录 ├── deps.edn ├── src/ │ └── doppelkopf/ │ └── core.clj └── test/ └── doppelkopf/ └── core_test.clj
修正后的测试文件完整代码:
(ns doppelkopf.core-test (:require [clojure.test :as test] [doppelkopf.core :refer :all])) (test/deftest addition (test/is (= 5 (+ 2 3)) "addition") (test/is (= 4 (+ 3 1))))
重新对测试文件执行求值操作即可正常运行测试。
内容的提问来源于stack exchange,提问作者David
相关产品推荐
相关产品推荐

