【发布时间】:2010-11-01 11:11:34
【问题描述】:
是否有用于 Common Lisp 的模拟/存根框架?
EmacsLispMock 看起来不错,但它是一个 Emacs lisp 框架,我正在寻找可以从 Common Lisp 中使用的东西。
有什么建议吗?
【问题讨论】:
-
模拟/存根框架有什么作用?
-
@Xach 这个想法是让您通过控制其他函数的行为来单独测试给定函数。因此,如果您有一个调用函数 B 的函数 A,您可以存根 B 以始终返回 5 或其他值,并验证 A 是否按照该返回值执行了它应该执行的操作。这样您就可以验证 A 是否工作,而无需调用实际的 B。一个常见的场景是测试依赖于数据库访问的代码,而无需为每个测试设置和配置数据库。
-
如果我想要的话,我可能只是将“存根函数 B”定义为 (defun b (&rest args) 5),具体来说,有一个返回 5 的函数。一旦到位并使用我的函数“B”已经过测试,重新加载正确的定义。
-
@vatine 如果你想在 B 之前实现 A,这在开发过程中会很有用,但是如果你用正确的实现重新定义 B,你将失去对 A 执行独立回归测试的能力。例如,如果 A 应该能够处理来自 B 的整数和 nil,我希望对这两种情况进行回归测试,这些情况与 B 的实际实现是隔离的(因为如果它依赖于文件系统,它可能会很慢且难以控制,数据库等)。
-
如果你做类似 (defvar b-return-value) 的事情,那么将 b 定义为 (defun b (&rest args) b-return-value i>)),你可以包装一个 LET,重新绑定 b-return-value。不过,这仍然意味着您需要有一个用于测试的定义和一个用于实际操作的定义。
标签: unit-testing tdd mocking lisp common-lisp