我正在尝试使用在这里找到的说明http://turtleware.eu/posts/Tutorial-Working-with-FiveAM.html来搭建Common Lisp项目。我克隆了存储库,并按照文档中的说明进行了操作,以使我的.asd
文件,package.lisp
文件以及tests/package.lisp
和tests/main.lisp
文件都与该说明匹配。我运行了(asdf:test-system 'quasirpg)
,一切正常。
我将此示例项目复制到我的真实工作文件夹中,并进行了搜索和替换,以将quasirpg
的所有实例更改为foo
。我运行了(asdf:test-system 'foo)
,REPL给我一个错误,找不到软件包“ FOO-TESTS”。
现在,我重新运行了(asdf:test-system 'quasirpg)
,该方法以前已经工作过,REPL给了我同样的错误,即找不到“ QUASIRPG-TESTS”软件包。
任何人都可以解释一下这里发生了什么以及如何让我的asdf
程序包管理器查找测试程序包吗?
Thank you.
;;;; foo.asd
(asdf:defsystem #:foo
:description "Part of the FiveAM tutorial"
:author "Tomek 'uint' Kurcz"
:license "GPLv3"
:serial t
:components ((:file "package")
(:file "foo"))
:in-order-to ((test-op (test-op "foo/tests"))))
(asdf:defsystem #:foo/tests
:depends-on (:foo :fiveam)
:components ((:module "tests"
:serial t
:components ((:file "package")
(:file "main"))))
:perform (test-op (o s)
(uiop:symbol-call :fiveam :run! 'foo-tests:all-tests)))
;;;; tests/package.lisp
(defpackage #:foo-tests
(:use :cl :fiveam)
(:export #:run! #:all-tests))
;;;; tests/main.lisp
(in-package #:foo-tests)
(def-suite all-tests
:description "The master suite of all foo tests.")
;; tests continue below
答案 0 :(得分:1)
我不喜欢Fiveam等自动测试的爱好者,但是您的问题是:perform
中对符号foo-tests:all-tests
的引用,该符号在系统中才会存在已加载。使用find-symbol
代替quote
以下脚本在我的计算机上运行完毕(我从您的帖子中的片段开始):
DIR=~/quicklisp/local-projects/foo
mkdir $DIR
cd $DIR
cat >foo.asd <<EOF
(asdf:defsystem #:foo
:description "Part of the FiveAM tutorial"
:author "Tomek 'uint' Kurcz"
:license "GPLv3"
:serial t
:components ((:file "package")
(:file "foo"))
:in-order-to ((test-op (test-op "foo/tests"))))
(asdf:defsystem #:foo/tests
:depends-on (:foo :fiveam)
:components ((:module "tests"
:serial t
:components ((:file "package")
(:file "main"))))
:perform (test-op (o s)
(uiop:symbol-call :fiveam
:run!
(find-symbol "ALL-TESTS"
"FOO"))))
EOF
touch package.lisp
touch foo.lisp
mkdir tests
cat >tests/package.lisp <<EOF
(defpackage #:foo-tests
(:use :cl :fiveam)
(:export #:run! #:all-tests))
EOF
cat >tests.main.lisp <<EOF
(in-package #:foo-tests)
(def-suite all-tests
:description "The master suite of all foo tests.")
EOF
sbcl --eval '(asdf:load-system "foo")'
避免这种象征意义的痛苦是痛苦的,为什么我通常不会接触asdf测试设备,我只是创建可以从repl运行的功能。