我正在尝试使用 asdf 的功能从 repl 运行我的测试套件,但是当使用 quicklisps 快速加载时,如果第一次尝试加载 foo 失败,第二次加载成功。
(in-package :cl-user)
(defpackage :foo-system
(:use :cl :asdf))
(in-package :foo-system)
(asdf:defsystem :foo
:components ((:file "foo")))
(asdf:defsystem :foo-tests
:depends-on (:foo)
:components ((:file "foo-tests")))
(defmethod asdf:perform ((op test-op) (system (eql (find-system :foo))))
(asdf:load-system 'foo-tests)
(foo-tests:run-tests))
这是有道理的,因为当我编译 asd 文件时,错误似乎是 asdf:perfom defmethod 的第二种形式。用 foo 替换 nclack 的错误是:
../../nclack/nclack.asd:36:27:读取错误:在编译文件期间读取错误:
Package NCLACK-TESTS does not exist. Line: 36, Column: 27, File-Position: 1034 Stream: #<SB-SYS:FD-STREAM for "file /Users/PuercoPop/quicklisp/local-projects/nclack/nclack.asd" {1005DB11A3}>
与 (foo-tests:run-tests) 行匹配。因此,“加载”系统似乎与编译其形式不同?或者为什么加载系统后没有定义包?有任何想法吗?我不知所措。