首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用RackUnit检查错误?

如何使用RackUnit检查错误?
EN

Stack Overflow用户
提问于 2020-11-02 10:50:06
回答 1查看 242关注 0票数 1

我有以下球拍代码。

代码语言:javascript
复制
#lang racket

(require rackunit racket/exn)

(define (string-last s)
  (let ((lng (string-length s)))
    (substring s (- lng 1) lng)))

(string-last "")
(check-equal? (string-last "1") "1")
(check-equal? (string-last "testing") "g")

使用空字符串进行的字符串最后一次调用如预期的那样失败:

代码语言:javascript
复制
--------------------
. ERROR
name:       check-exn
location:   014.rkt:12:0

substring: contract violation
  expected: exact-nonnegative-integer?
  given: -1
  argument position: 2nd
  other arguments...:
   ""
   0
--------------------

如何使用RackUnit库检查错误?

我试过了

代码语言:javascript
复制
(check-exn exn:fail? (string-last ""))

以及其他几个替代exn:fail?的变体,但我没有找到合适的一个。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-11-02 11:06:40

check-exn需要一个没有参数的函数--一次雷击--它可以调用应该会引发异常的函数。所以正确的咒语是

代码语言:javascript
复制
(check-exn exn:fail? (thunk (string-last "")))

它必须被传递一个thunk,因为否则默认的计算顺序就意味着异常在调用函数之前就会被引发,所以它永远不会捕获它。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64644108

复制
相关文章

相似问题

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