OCaml模拟模块生成

 tony2502877947 发布于 2023-02-09 14:59

我们有一些ocaml代码,模块之间有很多硬耦合依赖.最近,我们一直在转向仿函数方法来解耦这些模块,所以如果我们有模块A依赖于模块B和C,我们在声明中这样做:

module A: (B:B_Signature) (C:C_Signature) = struct ... end

像这样,我们可以在模块A中注入"模拟"B或C模块,回答这些签名,进行单元测试,并且仍然可以创建包含真实B和C模块的生产模块.问题是,现在我们必须手动输入这些模拟的模块,这是一个阻塞,因为它通常是装载样板.

所以,我正在寻找一种从ocaml模块生成"模拟"模块的方法,而不是手工输入.我的意思是,如果我有一个具有一些功能的模块,具有以下签名

   module type A =
    sig
    val f: string -> int -> string
    val g: string -> string -> int
    end

我想生成一个模拟实现,例如像这样

module A_mock =
struct
let f _s _i =
    ""
let g _s1 _s2 =
    0
end

所以,这是一个具有两个函数的模块,具有相同的签名,但是f和g的实现忽略了它们的参数并且默认返回,函数f的空字符串和函数g的0.

那些默认值,空字符串和零,只是一个例子.我知道我希望最终可以配置这个,我想创建模拟并指定某些函数的返回值,甚至可以检查调用模拟函数的参数等等,但是就目前而言,对于这个简单的案例,我正在寻找一种解决方案,而不是手动输入和实现这一点.

我没有找到任何为OCaml执行此操作的框架.

我试图通过camlp4和代码生成找出这可能是怎么做的,但文档似乎有点限制,我真的不知道它是否有可能.

那么,我的问题是,是否有人知道一个框架,或者是否有代码生成方式从OCaml中的签名创建这种样板模块?

卡斯帕

撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有