【问题标题】:Test Exception Raise in OcamlOcaml 中的测试异常引发
【发布时间】:2015-09-13 22:40:06
【问题描述】:

我在 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))

我如何断言这个异常?

【问题讨论】:

    标签: ocaml assert


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      我建议使用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 异常。

      【讨论】:

      • 我试图在不使用库的情况下解决这个问题。我已经使用assert_raises 进行了探索,它完全符合我的要求,但在我的作业中,我不允许使用库。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-24
      • 2015-11-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-04
      相关资源
      最近更新 更多