lisp 开发如何进行单元测试
* 实现方案函数定义及测试函数文件内容格式
(defun foobar (para1 para2)
"函数说明"
"返回值"
"示例"
;; 函数 实现代码
)
(fun:test foobar
'(
((x1 x2) . res1)) ;; 测试用例1
((y1 y2) . res2)) ;; 测试用例2
((z1 z2) . res3)) ;; 测试用例3
))
*实现核心代码
;; 测试通过为 t ,失败为 nil
(defun fun:test (fun usecases)
"函数测试,fun:函数名,usecases:测试用例,测试用例为参数和返回值组成的点对表。"
"lst,对应测试用例的测试结果,t为通过,nil为失败"
"(fun:test point:mid '((((0 0)(2 2)) . (1 1))(((3 3)(5 5)) . (4 4))))"
(mapcar
'(lambda (x)
(list:equal (apply (function fun) (car x))
(cdr x)
1e-6)
)
usecases))
上述代码如参数不致会导致错误退出。可改用vl catch 进行错误处理,保证测试用例全部执行。
* 使用说明
用法:(fun:test 函数名 用例列表)
示例:
(fun:test
point:mid
'((((0 0)(2 2)) . (1 1))
(((3 3)(5 5)) . (4 4))))
;; 上例为测试求两点的中点:
(point:mid '(0 0) '(2 2)) ;执行结果 (1 1)
(point:mid '(3 3) '(5 5)) ;执行结果 (4 4)
* 自动测试
创建 test 文件夹,文件夹下以函数名为文件名,文件内容为*测试用例*
用这样的文件结构为源数据,生成测试代码并执行。
如上例:在test文件夹下创建point:mid 文件。
其内容:(一行为一个测试用例)
(((0 0)(2 2)) . (1 1))
(((3 3)(5 5)) . (4 4))
讨论可至: https://gitee.com/atlisp/atlisp-lib/issues/I593AT
小白看不懂,好高深的样子
页:
[1]