首先让我说我是 OCaml 的一个完整的初学者,所以如果我似乎做出了一些奇怪的选择,我很可能没有意识到它们是一个选择。
我正在尝试在我的项目中进行单元测试。经过一番搜索,我决定了qtest.lib
。
我的项目设置如下:
$ mkdir mylib
$ cd mylib
$ dune init lib mylib
在dune
文件中,我写道:
(library
(name mylib)
(inline_tests (backend qtest.lib)))
在mylib.ml
中,我输入了以下代码:
let foo x = x + 2
(*$T foo
foo 2 = 4
*)
此时,一切都按预期工作:
$ dune runtest
Info: Creating file dune-project with this contents:
| (lang dune 2.9)
inline_test_runner_mylib alias runtest
random seed: 425752161
[1 / 1] >foo>mylib.ml:4 *
[1 / 1] >foo>;32;1mSUCCESS
如果我尝试在项目中引入另一个文件,问题就开始了。我创建helper.ml
了以下内容:
let bar x = 3 * x
(*$T bar
bar 3 = 9
*)
现在,dune runtest
错误出来了
$ dune runtest
File "mylib.ml", line 11, characters 5-11:
Error: Unbound module Helper
在我复制它的其他一些尝试中,提到的文件是_build/default/.mylib.inline-tests/inline_test_runner_mylib.ml-gen
.
我首先假设这意味着我错误地组织了我的文件。但是,我可以Helper.bar
访问mylib.ml
:
$ cat mylib.ml
let foo x = Helper.bar (x + 2)
$ dune build # no errors
因此,我不知道这里可能出现什么问题。这是怎么回事?