Rackunit:深入检查异常类型
Rackunit: in-depth check of exception type
在 Rackunit 中,我知道如何断言抛出异常:
#lang racket
(module+ test
(require rackunit)
(check-exn exn:fail:contract? (lambda () (3 + 4))))
但是,我找不到更具体的断言方法。查看 at the exception hierarchy in Racket、exn:fail:contract
可能意味着很多事情:错误的元数、除以零 ...
我想在测试中断言这个特定的异常是这样的:
; application: not a procedure;
; expected a procedure that can be applied to arguments
在其打印的消息中。你是如何做到这一点的?
谓词不必是内置异常谓词。您可以使用自己的,如下所示:
(check-exn (lambda (e)
(and (exn:fail:contract? e)
(regexp-match #rx"not a procedure" (exn-message e))))
(lambda () (3 + 4)))
Rackunit 的 check-exn
也接受一个正则表达式来代替异常谓词。在这种情况下,它会检查其消息与正则表达式匹配的 exn:fail
(或其任何子类型)。所以你也可以这样写:
(check-exn #rx"not a procedure" (lambda () (3 + 4)))
在 Rackunit 中,我知道如何断言抛出异常:
#lang racket
(module+ test
(require rackunit)
(check-exn exn:fail:contract? (lambda () (3 + 4))))
但是,我找不到更具体的断言方法。查看 at the exception hierarchy in Racket、exn:fail:contract
可能意味着很多事情:错误的元数、除以零 ...
我想在测试中断言这个特定的异常是这样的:
; application: not a procedure;
; expected a procedure that can be applied to arguments
在其打印的消息中。你是如何做到这一点的?
谓词不必是内置异常谓词。您可以使用自己的,如下所示:
(check-exn (lambda (e)
(and (exn:fail:contract? e)
(regexp-match #rx"not a procedure" (exn-message e))))
(lambda () (3 + 4)))
Rackunit 的 check-exn
也接受一个正则表达式来代替异常谓词。在这种情况下,它会检查其消息与正则表达式匹配的 exn:fail
(或其任何子类型)。所以你也可以这样写:
(check-exn #rx"not a procedure" (lambda () (3 + 4)))