gpt4 book ai didi

testing - 在测试包中访问包的内部符号

转载 作者:行者123 更新时间:2023-11-28 20:20:10 25 4
gpt4 key购买 nike

我有一个程序,我想使用 prove 来测试它。目前,我有一个单独的测试包。我面临的问题是我真的不想从主包中导出每个符号(我目前只导出一个),但我希望能够访问测试包中的所有内容。

使用 main-package::symbol 可行,但很丑陋,我猜这是个坏主意。有没有更好的方法可以做到这一点而不必导出我所有的符号只是为了测试它们?我考虑过使用相同的包来编写测试,但我不想在我的主包中有一个 (:use :prove) 当我只将它用于测试代码。有没有办法做类似 (:use :package) 但只针对一个文件的事情?如果有,在这里使用它有意义吗?

最佳答案

您可以将测试分离到它们自己的系统中。这样你的主系统就不会依赖于 prove 了。在测试系统中,您可以加载相同的源文件,但可以加载不同的包定义(这当然假设您将包定义放在不同的文件中,而不是使用将它们放在源文件顶部的奇怪习惯......) .

例如,主程序可能如下所示:

foo.asd:

;; Here I'm obviously putting the package def in the same file
(in-package :cl-user)
(defpackage :foo-asd
(:use :cl :asdf))
(in-package :foo-asd)

(defsystem "foo"
:components ((:file "foo-package")
(:file "foo")))

foo-package.lisp:

(in-package :cl-user)
(defpackage :foo
(:use :cl)
(:export :foo))

foo.lisp:

(in-package :foo)

(defun foo (x)
(+ (bar x)
(bar x)))

(defun bar (x)
(* x x))

和测试系统在同一目录下:

foo-test.asd:

(in-package :cl-user)
(defpackage :foo-test-asd
(:use :cl :asdf))
(in-package :foo-test-asd)

(defsystem "foo-test"
:depends-on (:prove)
:components ((:file "foo-test-package")
(:file "foo")
(:file "foo-test")))

foo-test-package.lisp

(in-package :cl-user)
(defpackage :foo
(:use :cl :prove))

foo-test.lisp:

(in-package :foo)

(plan 2)
(is (bar 2)
4)
(is (foo 2)
8)
(finalize)

这使您可以使用 sbcl --noinform --eval "(ql:quickload : foo-test)"--eval "(sb-ext:quit)"。如果需要,您当然可以将测试放在函数后面。

关于testing - 在测试包中访问包的内部符号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35169206/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com