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
.
版本
我在 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
.