首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Rackunit:异常类型的深度检查

Rackunit:异常类型的深度检查
EN

Stack Overflow用户
提问于 2016-02-01 17:59:38
回答 1查看 164关注 0票数 2

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

代码语言:javascript
复制
#lang racket

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

然而,我无法找到一种方法来断言更具体的东西。从在球拍中的异常层次中的角度看,exn:fail:contract可能意味着许多事情:错误的原则,除以零.

我要在测试中断言,这一特殊例外情况如下:

代码语言:javascript
复制
; application: not a procedure;
;  expected a procedure that can be applied to arguments

在它打印的信息中。你是怎么做到这一点的?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-02-01 21:33:14

谓词不必是内置的异常谓词。你可以用你自己的,像这样:

代码语言:javascript
复制
(check-exn (lambda (e)
             (and (exn:fail:contract? e)
                  (regexp-match #rx"not a procedure" (exn-message e))))
           (lambda () (3 + 4)))

Rackunit的check-exn还接受regexp代替异常谓词。在这种情况下,它检查消息与regexp匹配的exn:fail (或其任何子类型)。所以你也可以这样写:

代码语言:javascript
复制
(check-exn #rx"not a procedure" (lambda () (3 + 4)))
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35137239

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档