所以,我一直在为AutoCAD 2005开发一些程序,而且我一直遇到问题 - 具体来说,我一直在研究一个需要根据绝对角度绘制线条的程序(“方位角” “)和距离,从特殊输入格式转换为度数到弧度和后退,和许多其他程序员一样,我的代码变得特别笨重和错误;我已经被困了将近一个半星期的程序/脚本应该花费大约三到四天。
我一直在考虑实现一个测试框架,使开发更顺畅,但与其他语言不同,我正在使用一种据说绝对没有库的语言,更好的是,它是嵌入式的脚本环境。
我对设计如何运作有一些想法,但我需要解释一些事情:
我编写的大多数程序都是类似控制台的命令,就像shell一样。例如,假设我写了一个函数x
。在AutoLISP中,它表示为(斜线也在字面上):(defun x (arguments / local variables) body of function)
。为了使其暴露在控制台中,我需要将名称从x
更改为C:x
。
因此,我的大多数测试必须直接从控制台完成;我倾向于避免在AutoCAD中使用内置的Visual Lisp编辑器,因为它似乎与程序最有可能使用的实际工作环境脱节,并且它似乎没有实际的调试器。 因此,我经常需要使用(print "string")
或其他方法来调试我的代码。
1。我想为测试框架公开哪些类型的函数?我自己也听说过多种范例,比如编译时测试,断言,Java中的测试类等等。我应该尝试编写一个断言?也许我应该创建反射使用测试?
2。我想如何以及在哪里注入测试?我已经考虑过编写一个不同的函数并将所有局部变量转换为全局变量以将其暴露给可能的测试环境,但我仍然不确定我可能想要什么去做这个。我相信AutoLISP缺乏常规的Lisp宏,但我认为它仍然具有非常好的反射功能,因此我可以实际将命令输入控制台以便执行操作。我觉得一个外部的,非侵入性的框架会最有意义,但我希望能得到一个更有经验的答案。
答案 0 :(得分:1)
基本功能,输入相同,系统提供相同的输出。
有用的功能:断言。给定测试代码中的一些设置,然后运行要测试的程序的一部分,并对输出进行断言。如果所有断言都符合预期,则打印最小的内容。如果断言失败,请打印更详细的内容,以帮助追踪出错的地方。
增量功能。如果您的测试出现问题,并且您必须手动查找错误,请编写一个测试,以便下次覆盖该错误。
持续功能。让测试至少每次提交一次到源控制系统。如果故障很常见但是测试本身很快,它们可以作为预先提交运行,或者如果故障很少但测试很慢,则可以作为postubmit运行。