Unit testing 如何使用RackUnit检查错误?

Unit testing 如何使用RackUnit检查错误?,unit-testing,exception,lisp,racket,htdp,Unit Testing,Exception,Lisp,Racket,Htdp,我有以下代码 #朗球拍 (需要机架单元球拍/exn) (定义(最后一个字符串) (让((lng(管柱长度s))) (子串s(-lng 1)lng))) (最后一个字符串为“”) (检查是否相等?(最后一个字符串“1”)“1”) (检查是否相等?(字符串最后一个“测试”)“g”) 使用空字符串调用string last失败,原因如下: -------------------- . ERROR name: check-exn location: 014.rkt:12:0 subs

我有以下代码

#朗球拍
(需要机架单元球拍/exn)
(定义(最后一个字符串)
(让((lng(管柱长度s)))
(子串s(-lng 1)lng)))
(最后一个字符串为“”)
(检查是否相等?(最后一个字符串“1”)“1”)
(检查是否相等?(字符串最后一个“测试”)“g”)
使用空字符串调用string last失败,原因如下:

--------------------
. ERROR
name:       check-exn
location:   014.rkt:12:0

substring: contract violation
  expected: exact-nonnegative-integer?
  given: -1
  argument position: 2nd
  other arguments...:
   ""
   0
--------------------
如何使用库检查错误

我试过了

(检查exn exn:fail?(最后一个字符串“”)

还有其他几个变量代替了
exn:fail?
,但我没有找到正确的变量。

check-exn
需要一个没有参数的函数–thunk–它可以调用该函数,从而引发异常。所以正确的咒语应该是

(check-exn exn:fail? (thunk (string-last "")))

它必须传递thunk,因为否则Racket的默认求值顺序将意味着在调用函数之前引发异常,因此它永远无法捕获它。

check exn
需要一个没有参数的函数–thunk–它可以调用该函数来引发异常。所以正确的咒语应该是

(check-exn exn:fail? (thunk (string-last "")))
它必须传递一个thunk,因为否则Racket的默认求值顺序将意味着在调用函数之前引发异常,因此它永远无法捕获它