vitalgg 发表于 2024-7-22 12:02:07

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

帝都划水王 发表于 2024-7-22 14:41:07

小白看不懂,好高深的样子
页: [1]
查看完整版本: lisp 开发如何进行单元测试