Unit testing 如何在Guile中构建单元测试,将哪个输出输出到TAP标准?

Unit testing 如何在Guile中构建单元测试,将哪个输出输出到TAP标准?,unit-testing,tap,guile,Unit Testing,Tap,Guile,我想要一个Guile脚本,它实现函数,根据TAP协议输出测试结果消息。下面的脚本名为guiletap.scm,它实现了在运行测试时使用TAP协议的常用函数 ; Define functions for running Guile-written tests under the TAP protocol. ; Copyright © 2008 by Omer Zak ; Released under the GNU LGPL 2.1 or (at your option) any lat

我想要一个Guile脚本,它实现函数,根据TAP协议输出测试结果消息。

下面的脚本名为guiletap.scm,它实现了在运行测试时使用TAP协议的常用函数

; Define functions for running Guile-written tests under the TAP protocol. ; Copyright © 2008 by Omer Zak ; Released under the GNU LGPL 2.1 or (at your option) any later version. ;;; ;;; To invoke it: ;;; (use-modules (guiletap)) ;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (define-module (guiletap)) (export plan) (export ok) (export bail_out) (export diag) (export is_ok) (use-modules (ice-9 format)) ; n is the number of tests. (define plan (lambda (n) (display (format "1..~d~%" n)))) ; n - test number ; testdesc - test descriptor ; res - result which is #f at failure, other at success. (define ok (lambda (n testdesc res) (if (not res)(display "not ")) (display (format "ok ~d - ~a~%" n testdesc)))) ; testdesc - test descriptor (define bail_out (lambda (testdesc) (display (format "Bail out! - ~a~%" testdesc)))) ; diagmsg - diagnostic message (define diag (lambda (diagmsg) (display (format "# ~a~%" diagmsg)))) ; n - test number ; testdesc - test descriptor ; expres - expected test result ; actres - actual test result (define is_ok (lambda (n testdesc expres actres) (ok n testdesc (equal? expres actres)))) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; !!! TODO: ; !!! To be implemented also: ; plan_no_plan ; plan_skip_all [REASON] ; ; is RESULT EXPECTED [NAME] ; isnt RESULT EXPECTED [NAME] ; like RESULT PATTERN [NAME] ; unlike RESULT PATTERN [NAME] ; pass [NAME] ; fail [NAME] ; ; skip CONDITION [REASON] [NB_TESTS=1] ; Specify TODO mode by setting $TODO: ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; End of guiletap.scm ; 定义在TAP协议下运行Guile书面测试的函数。 ; Omer Zak版权所有©2008 ; 根据GNULGPL2.1或(由您选择)任何更高版本发布。 ;;; ;;; 要调用它: ;;; (使用模块(guiletap)) ;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (定义模块(guiletap)) (出口计划) (出口正常) (出口纾困) (导出诊断) (出口正常) (使用模块(ice-9格式)) ; n是测试数。 (定义计划) (λ(n)(显示格式为“1..~d~%n”)) ; n-测试数 ; testdesc-测试描述符 ; res-失败时为f,成功时为其他结果。 (定义ok (lambda(n testdesc res) (如果(非res)(显示“非”)) (显示(格式为“ok~d-~a~%”n testdesc))) ; testdesc-测试描述符 (定义纾困) (lambda(testdesc) (显示(格式为“Bail out!-~a~%”testdesc))) ; diagmsg-诊断消息 (定义诊断 (lambda(diagmg) (显示(格式为“#~a~%”diagmsg))) ; n-测试数 ; testdesc-测试描述符 ; expres-预期测试结果 ; actres-实际测试结果 (你还好吗 (lambda(n testdesc expres actres) (ok n testdesc(相等?表达式))) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; !!! 待办事项: ; !!! 还将实施: ; 计划没有计划 ; 计划跳过所有[原因] ; ; 是否需要结果[名称] ; 不需要结果[名称] ; 相似结果模式[名称] ; 与结果模式[名称]不同 ; 通过[姓名] ; 失败[姓名] ; ; 跳过条件[原因][NB_测试=1] ; 通过设置$TODO指定TODO模式: ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; scm现在还有一个Guile单元测试框架,它可以输出TAP格式的(一个子集)结果。为此,请将所有测试(方案)脚本放在名为
spec
的项目子目录中,然后运行:

$ ggspec -f tap
由于ggspec是一个具有设置、拆卸和跳过测试的成熟框架,因此有更多的选项。请参阅项目附带的示例测试文件(
spec/lib-spec.scm
),以获得良好的概述

免责声明:我写了ggspec