log*_*ogc 2 unit-testing exception racket rackunit
在Rackunit中,我知道如何断言抛出异常:
#lang racket
(module+ test
(require rackunit)
(check-exn exn:fail:contract? (lambda () (3 + 4))))
Run Code Online (Sandbox Code Playgroud)
但是,我找不到一种方法来断言更具体的东西.看看Racket中的异常层次结构,exn:fail:contract可能意味着许多事情:错误的arity,除以零......
我想在测试中声明这个特殊的异常是:
; application: not a procedure;
; expected a procedure that can be applied to arguments
Run Code Online (Sandbox Code Playgroud)
在其印刷的信息中.你是如何做到这一点的?
谓词不必是内置的异常谓词.您可以使用自己的,如下所示:
(check-exn (lambda (e)
(and (exn:fail:contract? e)
(regexp-match #rx"not a procedure" (exn-message e))))
(lambda () (3 + 4)))
Run Code Online (Sandbox Code Playgroud)
Rackunit check-exn也接受正则表达式代替异常谓词.在这种情况下,它检查exn:fail其消息是否与正则表达式匹配的(或其任何子类型).所以你也可以这样写:
(check-exn #rx"not a procedure" (lambda () (3 + 4)))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
87 次 |
| 最近记录: |