繁体   English   中英

OCaml-签名中不包含测试功能

[英]OCaml - testing functions not included in the signature

我正在为OCaml模块编写测试。 该模块中的某些功能并不意味着是公开可见的,因此它们不包含在签名(.mli文件)中。

我无法从测试中调用这些函数,因为它们在模块外部不可见。 所以我很难测试它们。 有没有解决这个问题的好方法? 例如,一种告诉ocamlc在编译测试时不要从.mli文件读取签名的方法吗?

一些想法:

  • 实际导出测试功能,但使用ocamldoc的停止注释(** / **)功能以避免在文档中显示导出。
  • 将所有测试完全放在另一个模块中。 但是,如果您有抽象类型,这将很困难,因为您的测试很可能需要访问内部实现。
  • 创建一个子模块Test,所有测试都将在其中进行。 这样,很清楚什么功能仅用于测试。 可能将此功能与(** / **)功能结合使用,也可以从文档中隐藏子模块。

我听说人们有时会将他们的.mli文件与他们的.ml文件分开(在另一个目录中),以便他们可以在有或没有它们的情况下进行编译(通过告诉ocamlc是否在单独的目录中查找)。 我只是尝试了一些实验。 我认为可以使它正常工作,但是我似乎容易出错。 也许您可以将内部功能的测试放入模块中。 导出测试功能可能不会严重违反模块化。 (当然,它会使模块混乱。)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM