使用OUnit单元测试框架在OCaml中,我想测试一个函数的评估结果是一个指定类型的实例。
在Python的PyTest中定义这样的测试如下:
def test_foo():
assert isinstance(foo(2), int)如何将此逻辑转换为OUnit?也就是说,如何指定类型成员关系的断言?
我知道,假设测试中的函数带有正确的类型签名注释,这个测试可能是不必要的。
发布于 2017-01-06 19:34:44
这是类型检查器的工作,它是在编译期间(静态时)自动生成的。类型检查器(即编译器)确保由函数创建的所有值都具有相同的类型,并且类型在编译时是静态定义的。您将无法编译一个创建不同类型值的函数,因为您将在编译期间得到一个类型错误。这是所有静态类型化语言的基本属性,例如,Java、C和C++也具有相同的属性。
所以,很可能,你使用的是混乱的术语。可能是这样的,实际上您要测试的是,这个值属于和类型的一个特定变体。例如,如果有一个名为numbers的sum类型定义为:
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))https://stackoverflow.com/questions/41472699
复制相似问题