Common lisp asdf:从Makefile测试系统不';t返回错误返回码

Common lisp asdf:从Makefile测试系统不';t返回错误返回码,common-lisp,asdf,Common Lisp,Asdf,我的单元测试运行正常,但是当测试失败时,maketest目标不会返回错误代码(echo$?为0)(当出现lisp错误时会返回) 这对CI系统不好 我的主系统定义以结尾,以便: :in-order-to ((test-op (test-op "mysystem/test")))) 我的测试系统有一个performone: :perform (test-op (o s) (uiop:symbol-call '#:mysestem.test '#:te

我的单元测试运行正常,但是当测试失败时,
maketest
目标不会返回错误代码(
echo$?
为0)(当出现lisp错误时会返回)

这对CI系统不好

我的主系统定义以
结尾,以便

  :in-order-to ((test-op (test-op "mysystem/test"))))
我的测试系统有一个
perform
one:

  :perform (test-op (o s)
                    (uiop:symbol-call '#:mysestem.test '#:test-all)))
其中,
test all
是一个运行带有
run!'的Fiveam测试套件的函数测试套件

制定目标:

test:
  # (with proper indentation…)
  $(LISP) --non-interactive \
    --eval "(asdf:load-asd \""$(ASD_PATH)"\")" \
    --eval "(ql:quickload :mysystem/test)" \
    --eval "(asdf:test-system \"mysystem\")"
注意,遵循ASDF的操作

“函数:run!未定义”时出错

我们如何做到这一点


谢谢。

似乎有打字错误:

  • ”#:myestem.test
    ⇒ <代码>'#:mysystem.test
  • #':快跑⇒ <代码>'#:快跑

ASDF:TEST-SYSTEM
不会终止映像,因此不会以某种方式影响退出代码。如何使用错误代码退出取决于实现,但uiop具有
uiop:QUIT
。这实际上是有意义的,因为我们可以从repl调用它。因此,我尝试了类似于
--eval”(除非(asdf:testsystem\'mysystem\)(uiop:quit 1))“
的方法,但迄今为止没有成功。我有一个失败的测试,仍然
0
,但是最后一个输出是
没有运行任何东西…嗯?
所以也许fiveam没有在这里返回
nil
。现在我有一个干净的输出,有一个失败的测试,但是仍然
echo$?
=0。
ASDF:test-SYSTEM
的返回值并不表示测试成功/失败。本手册建议从发出信号发出条件。
运行
一个是真实的。我把它命名为一个测试套件(如
:testsuite
),但它没有运行任何东西:/“没有运行任何东西……嗯?”
                    (symbol-call :fiveam #':run! :test-suite)))