You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用fiveam测试Common Lisp项目及独立文件的问题排查

问题解决指南:FiveAM测试失败与独立文件测试方法

一、解决undefined function与测试未运行问题

1. 确认主包函数导出

在项目src/main.lisp的包定义中,确保目标函数被导出,或在函数定义后显式导出:

;; src/main.lisp
(defpackage #:proj1/main
  (:use #:cl)
  (:export #:anyoddp))  ; 导出测试目标函数

(defun anyoddp (n)
  (oddp n))

2. 配置测试包的依赖导入

在tests/main.lisp中,确保测试包能正确访问主包的函数:

;; tests/main.lisp
(defpackage #:proj1/tests/main
  (:use #:cl #:fiveam #:proj1/main))  ; 直接引用主包,或用:import-from指定函数

(def-suite proj1-tests
  :description "proj1的测试套件")
(in-suite proj1-tests)

(test anyoddp-test
  (is (anyoddp 3))
  (is (not (anyoddp 2))))

3. 修正ASDF系统配置

确保proj1.asd中正确绑定测试系统与test操作:

;; proj1.asd
(defsystem #:proj1
  :description "proj1 project"
  :author "Your Name"
  :license "MIT"
  :depends-on ()
  :components ((:file "src/main"))
  :defsystem-depends-on (:fiveam)
  :perform (test-op (op c)
             (fiveam:run! :proj1/tests/main)
             (unless (fiveam:results-status (fiveam:run! :proj1/tests/main))
               (error "Tests failed!"))))

(defsystem #:proj1/tests
  :description "Tests for proj1"
  :depends-on (#:proj1 #:fiveam)
  :components ((:file "tests/main")))

4. 重新加载并运行测试

在REPL中执行以下命令:

(asdf:load-system :proj1/tests)
(asdf:test-system :proj1)

若仍报错,可通过(find-symbol "ANYODDP" :proj1/main)检查函数是否被正确加载,返回NIL则说明主包未正常加载。

二、测试独立文件a.lisp中的函数

方法1:直接加载文件后测试

  1. 在REPL中加载独立文件:
(load "/完整路径/a.lisp")
  1. 在测试用例中直接调用目标函数(需注意函数所属包,若未自定义包则默认在cl-user):
;; 在tests/main.lisp中新增测试
(test a-file-function-test
  (is (equal (cl-user::目标函数名 5) 预期结果)))

方法2:通过ASDF纳入测试流程

若需将a.lisp整合到项目测试中,修改测试系统的组件配置:

;; proj1.asd中更新测试系统
(defsystem #:proj1/tests
  :description "Tests for proj1"
  :depends-on (#:proj1 #:fiveam)
  :components ((:file "/完整路径/a.lisp")  ; 添加独立文件
               (:file "tests/main")))

加载测试系统后,即可直接在测试用例中访问a.lisp的函数。

内容的提问来源于stack exchange,提问作者7stud

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 14:37:46