gpt4 book ai didi

unit-testing - 在 OCaml 中为模块编写单元测试的正确方法

转载 作者:行者123 更新时间:2023-12-04 02:16:16 26 4
gpt4 key购买 nike

我在 module.mli 中有一个给定的接口(interface)规范文件。我必须在 module.ml 中编写它的实现文件。
module.mli提供抽象类型

type abstract_type

我正在使用 OUnit 来创建测试。我需要在其中使用类型的实现。 (例如比较值)一种解决方案是扩展接口(interface)以包含测试中使用的附加功能。

但是有没有可能在不修改界面的情况下做这样的事情呢?

最佳答案

在不接触模块接口(interface)的情况下公开测试的唯一方法是将测试注册到某个全局容器。如果您有一个名为 Tests 的模块提供函数register , 你的 module.ml将包含如下内容:

让 some_test = ...

let () = Tests.register some_test

我不推荐这种方法,因为 Tests模块失去了对其将要运行的测试的控制。

相反,我建议导出测试,即将它们添加到 module.mli .

请注意,在不依赖 OUnit 的情况下,您可以导出任何人都可以运行的以下类型的测试。我们的测试如下所示:

让 test_cool_feature () =
...
断言……;
...
断言……;
真的

让 test_super_feature () =
...
a = b

让测试= [
“酷功能”,test_cool_feature;
“ super 特征”,test_super_feature;
]

界面是:

...
(**/**)
(* ocamldoc 忽略的开始部分 *)

val test_cool_feature : 单位 -> bool
val test_super_feature : 单位 -> bool
val 测试 : (string * (unit -> bool)) 列表

关于unit-testing - 在 OCaml 中为模块编写单元测试的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33524274/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com