测试框架的标准功能是什么?

What features are standard for a testing framework?

所以,我一直在为 AutoCAD 2005 开发一些程序,而且我一直 运行 遇到问题——具体来说,我一直在开发一个需要基于在绝对角度(“方位角”)和距离上,从特殊输入格式转换为度数再转换为弧度,并且像许多其他程序员一样,我的代码变得特别笨重和错误; program/script 我已经被困了将近一个半星期,本来应该花三四天的时间。

我一直在考虑实现一个测试框架以使开发更加顺畅,但与其他语言不同,我正在使用一种据称完全没有库的语言,甚至更好,这是一个嵌入脚本环境。

我对设计可能如何运作有一些想法,但我需要解释几件事:

正在执行commands/AutoLISP后台

我写的大部分程序都是类似控制台命令的形式,很像 shell。例如,假设我写了一个函数 x。在 AutoLISP 中,它表示为(斜线也确实存在):(defun x (arguments / local variables) body of function)。要使其暴露给控制台,我需要将名称从 x 更改为 C:x

所以,我的大部分测试必须直接从控制台完成;我倾向于避免使用 AutoCAD 中的内置 Visual Lisp 编辑器,因为它似乎与程序最有可能使用的实际工作环境脱节,而且它似乎没有实际的调试器。 所以,我经常不得不使用(print "string")或其他方法来调试我的代码。

Ideas/Thoughts/Questions

1.我想为测试框架公开哪些类型的功能? 我自己听说过多种范例,例如编译时测试、断言、测试 类 in Java,等。我应该尝试编写一个断言吗?也许我应该创建使用反射的测试?

2。我想如何以及在何处注入测试? 我考虑过编写一个不同的函数并将所有局部变量转换为全局变量以将其暴露给可能的测试上下文,但我仍然不确定我会怎么做想做这个。 AutoLISP 缺少常规的 Lisp 宏,我相信,但我认为它仍然具有非常好的反射功能,因此我可以实际向控制台输入命令以执行操作。我觉得一个外部的、非侵入式的框架最有意义,但我想得到一个更有经验的答案。

基本功能:相同的输入,系统给出相同的输出。

有用的功能:断言。给定测试代码中的一些设置,然后您 运行 部分要测试的程序,并对输出进行断言。如果所有断言都符合预期,则打印一些最少的内容。如果断言失败,请打印更详细的内容,以帮助追查出错的地方。

增量功能。如果您的测试有问题,并且您必须手动查找错误,请编写一个下次将覆盖该错误的测试。

持续功能。每次提交到源代码控制系统时至少进行一次测试运行。如果失败很常见但测试本身很快,他们可以 运行 作为预提交,或者如果失败很少见但测试很慢,他们可以 运行 作为提交后。