使用OCaml中的OUnit单元测试框架,我想测试一下,评估函数的结果是指定类型的实例。
在Python的PyTest中定义这样的测试将按如下方式进行:
def test_foo():
assert isinstance(foo(2), int)
如何将此逻辑转换为OUnit?也就是说,如何指定类型成员资格的断言?
我知道,假设正在测试的函数使用正确的类型签名进行注释,则可能不需要进行此测试。
答案 0 :(得分:1)
这是类型检查器的工作,它在编译期间自动生成(在静态时间)。类型检查器(即编译器)保证函数创建的所有值具有相同的类型,并且在编译时静态定义类型。您将无法编译创建不同类型值的函数,因为在编译期间会出现类型错误。这是所有静态类型语言的基本属性,例如,Java,C和C ++也具有相同的属性。
所以,可能,你使用的是令人困惑的术语。可能是这样的,你实际上试图测试的是,该值属于和类型的特定变体。例如,如果您将名为numbers
的和类型定义为:
type t =
| Float of float
| Int of int
并且您想测试该函数truncate
,定义为
let truncate = function
| Float x -> Int (truncate x)
| x -> x
始终返回Int
变体,然后您可以执行以下操作:
let is_float = function Float _ -> true | _ -> false
let is_int = function Int _ -> true | _ -> false
assert (is_int (truncate 3.14))