【问题标题】:Rackunit: in-depth check of exception typeRackunit:深入检查异常类型
【发布时间】:2016-02-01 17:59:38
【问题描述】:

在 Rackunit 中,我知道如何断言抛出了异常:

#lang racket

(module+ test
  (require rackunit)
  (check-exn exn:fail:contract? (lambda () (3 + 4))))

但是,我找不到更具体的断言方法。看着 at the exception hierarchy in Racketexn:fail:contract 可能意味着很多事情:错误的数量、被零除...

我想在测试中断言这个特殊的异常是这样的:

; application: not a procedure;
;  expected a procedure that can be applied to arguments

在其打印的消息中。你是如何做到这一点的?

【问题讨论】:

    标签: unit-testing exception racket rackunit


    【解决方案1】:

    谓词不必是内置的异常谓词。您可以使用自己的,如下所示:

    (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)))
    

    【讨论】:

    • 正是我需要的。谢谢!
    猜你喜欢
    • 1970-01-01
    • 2010-12-26
    • 2016-11-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多