Ocaml 中的测试异常引发

Test Exception Raise in Ocaml

我在 OCaml 中编写了一个简单的非负数斐波那契函数,如果传入负数,我会在其中引发异常。

let rec fib (n:int) : int =
  match n with
  | a when a < 0 -> invalid arg ("Positive numbers only")
  | i when i < 2 -> n
  | _ -> fib (n - 1) + fib(n - 2)

  let _ = assert (fib(-1))

功能很简陋(这是我的第一个OCaml程序),但我的问题是测试在执行fib(-1).

时是否抛出异常
let _ = assert (? = fib(-1))

如何断言此异常?

我建议使用 OUnit2 进行测试。它提供了一个非常适合这种情况的 assert_raises 函数:

open OUnit2

let fib_test () =
  let f = fun () -> fib(-1) in
  OUnit2.assert_raises (Invalid_argument "Positive numbers only") f

invalid_arg 函数引发 Invalid_argument 异常。

@SteveVinoski 的回答非常好,但显然这是一个家庭作业问题,而不是真正的问题:-)

try ... with 语句是处理异常的 OCaml 片段。这就是您需要用来验证是否引发异常的内容。您可以使用它来编写您自己的 assert_raises.

版本