我一直在设置一个测试套件,同时推进我的团队正在编写的应用程序,今天我遇到了一个问题,即如何测试运行我们应用程序的脚本。我们允许用户为Random
模块设置种子以允许结果的可重复性(这在科学应用程序中非常重要),我在测试套件中使用它来比较一组脚本中的stdout / stderr “批准”运行。
在更新这些脚本时,我注意到某些机器上的所有脚本都失败了。我很快发现这是由于Random
module from version 3.12.0改变了生成随机位的核心功能。目前我们在许多环境(win32,osx,linux)上运行多个版本的OCaml(包括3.13),我们更愿意针对不同版本的OCaml进行测试。
我想将Random
模块从3.12.1替换到我们的发行版中,以保证一致性,无论用户编译的OCaml版本如何。但是,在源目录中删除Random
模块的天真方法报告编译器找到了两个定义名为Random
的模块的文件。
有关解决此问题的任何建议吗?我意识到我可以将Random
重命名为XRandom
,然后使用该模块来定义我需要的内容或包含标准库随机模块,但这需要更改每个函数调用并允许开发人员继续(意外地) )使用Random
而不是重载版本。有没有办法在编译期间选择特定的随机模块?或者也许是其他一些我不知道的选择。
编辑:
我刚刚从OCaml 3.12.1中取出随机模块并将其放入我的项目中,在通过OCamlbuild进行编译时我在链接期间收到以下错误消息(这与OCaml 3.13.0 + dev8相同的错误,几乎是什么我预计当我这样做时,
Error: Files random.cmx and /opt/ocaml-3.12.1/lib/ocaml/stdlib.cmxa
both define a module named Random
链接线是,
答案 0 :(得分:2)
您确实可以使用自己的XRandom
模块,并在测试文件的顶部添加module Random = XRandom
。
不幸的是,我担心你的问题没有好的和干净的解决方案......