如何使用 RackUnit 检查错误?
How to use RackUnit to check for an error?
我有以下 Racket 代码。
#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")
使用空字符串调用最后一个字符串失败,原因是:
--------------------
. 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 库检查错误?
我试过了
(check-exn exn:fail? (string-last ""))
和其他几个替代 exn:fail?
的变体,但我没能找到合适的变体。
check-exn
需要一个没有参数的函数 - 一个 thunk - 它可以调用应该引发异常的函数。所以正确的咒语是
(check-exn exn:fail? (thunk (string-last "")))
它必须传递一个 thunk,否则 Racket 的默认评估顺序将意味着异常在 在 函数被调用之前引发,因此它永远无法捕获它。
我有以下 Racket 代码。
#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")
使用空字符串调用最后一个字符串失败,原因是:
--------------------
. 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 库检查错误?
我试过了
(check-exn exn:fail? (string-last ""))
和其他几个替代 exn:fail?
的变体,但我没能找到合适的变体。
check-exn
需要一个没有参数的函数 - 一个 thunk - 它可以调用应该引发异常的函数。所以正确的咒语是
(check-exn exn:fail? (thunk (string-last "")))
它必须传递一个 thunk,否则 Racket 的默认评估顺序将意味着异常在 在 函数被调用之前引发,因此它永远无法捕获它。