2011-12-08 27 views
2

我正在为OCaml模块编写测试。模块中的一些功能并不是公开可见的,所以它们不包含在签名(.mli文件)中。OCaml - 签名中未包含测试功能

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

回答

4

一些想法:

  • 其实导出测试功能,但使用ocamldoc的停止注释(**/**)功能,以避免显示的出口文档。
  • 把所有的测试完全放在另一个模块中。然而,如果你有抽象类型,这很难,因为你的测试很可能需要访问内部实现。
  • 创建一个子模块测试,在这里进行所有测试。这样就明确了哪些功能仅用于测试。可能将其与(**/**)功能组合在一起,以隐藏文档中的子模块。
+0

现在我正在与你的第一个建议。看起来像最简单的解决方案。 – declan

1

我听说人们有时会将他们的.mli文件与他们的.ml文件(在不同的目录中)分开,以便他们可以编译或不编译它们(通过告诉ocamlc查看单独的目录)。我只是尝试了一些实验。我认为它可以工作,但似乎有点容易出错。也许你可以把内部函数的测试放入模块中。导出测试函数可能不会严重违反模块化。 (当然它杂波了模块。)

+0

我试着将.mli文件放入另一个目录。这似乎工作得很好,但最终我认为我会用Ashish的建议使用停止评论'(**/**)',因为这样做有点简单。 +1虽然,好建议。 – declan