OUnit:断言值是类型的实例

OUnit: assert value is instance of type

使用OCaml中的OUnit单元测试框架,我想测试一个函数的求值结果是指定类型的实例。

在 Python 的 PyTest 中定义这样的测试将按如下方式完成:

def test_foo():
    assert isinstance(foo(2), int)

如何将此逻辑转换为 OUnit?也就是说,类型成员资格的断言是如何指定的?

我知道,假设被测函数使用正确的类型签名进行注释,则此测试可能是不必要的。

这是类型检查器的工作,它是在编译期间自动生成的(静态时)。类型检查器(即编译器)保证函数创建的所有值都具有相同的类型,并且类型是在编译时静态定义的。您将无法编译创建不同类型值的函数,因为您将在编译期间遇到类型错误。这是所有静态类型语言中必不可少的属性,例如Java,C和C++也有相同的属性。

所以,您使用的可能是令人困惑的术语。可能是这种情况,您实际要测试的是该值属于总和类型的特定变体。例如,如果您有一个名为 numbers 的求和类型定义为:

type t = 
  | Float of float
  | Int of int

并且您想测试该函数 truncate,定义为

 let truncate = function
   | Float x -> Int (truncate x)
   | x -> x

始终returns Int 变体,那么您可以按如下方式执行此操作:

  let is_float = function Float _ -> true | _ -> false
  let is_int = function Int _ -> true | _ -> false

  assert (is_int (truncate 3.14))