如何在Guile中编写单元测试并输出TAP标准?

3
我希望你能够编写一个Guile脚本,实现函数,根据TAP协议输出测试结果消息。
2个回答

3

现在也有ggspec,这是一个Guile单元测试框架,可以输出(TAP格式的子集)测试结果。要做到这一点,请将所有测试(Scheme)脚本放入名为spec的项目子目录中并运行:

$ ggspec -f tap

由于ggspec是一个完整的框架,具有设置、拆卸和测试跳过等功能,因此可选项更多。请参阅项目中附带的示例测试文件(spec/lib-spec.scm)以获得很好的概述。

免责声明:本人编写了ggspec。


2
下面的脚本将被命名为guiletap.scm,实现了在运行测试时使用TAP协议所需的常用功能。
; 定义用于在TAP协议下运行Guile编写的测试的函数。
; 版权所有 © 2008 Omer Zak
; 根据GNU LGPL 2.1或(根据您的选择)任何更新版本发布。
;;;
;;; 调用方式:
;;; (use-modules (guiletap))
;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(define-module (guiletap))
(export plan)
(export ok)
(export bail_out)
(export diag)
(export is_ok)
(use-modules (ice-9 format))
; n是测试数量。 (define plan (lambda (n) (display (format "1..~d~%" n))))
; n - 测试编号 ; testdesc - 测试描述 ; res - 失败时为#f,成功时为其他值。 (define ok (lambda (n testdesc res) (if (not res)(display "not ")) (display (format "ok ~d - ~a~%" n testdesc))))
; testdesc - 测试描述 (define bail_out (lambda (testdesc) (display (format "Bail out! - ~a~%" testdesc))))
; diagmsg - 诊断消息 (define diag (lambda (diagmsg) (display (format "# ~a~%" diagmsg))))
; n - 测试编号 ; testdesc - 测试描述 ; expres - 预期测试结果 ; actres - 实际测试结果 (define is_ok (lambda (n testdesc expres actres) (ok n testdesc (equal? expres actres))))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; !!! TODO: ; !!! 还需实现: ; 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] ; 通过设置$TODO来指定TODO模式:
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; guiletap.scm结束

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接