运行 使用沙丘的 OUnit 测试
Running OUnit tests using dune
我在 运行 测试 OUnit 时遇到困难,主要是因为我对 dune 和 OUnit 都不熟悉。 dune
抱怨当我 运行 dune runtest
:
File "test/dune", line 4, characters 13-14:
Error: Library "f" not found.
Hint: try: dune external-lib-deps --missing @runtest
项目结构如下:
├── dune
├── f.ml # This is the source file.
└── test
├── dune
└── f_test.ml # This is the test.
这是dune
:
(executable
(name f))
这是test/dune
:
(test
(name f_test)
(libraries oUnit f)) ; <- `f` here causes problems.
我可以看到出现错误是因为 dune 不知道 f.ml
,因此不知道 dune 文件中的 f
。
如何让 dune 编译 f.ml
使 test/dune
知道我在 test/f_test.ml
中使用的 f
库?我怎样才能 运行 单元测试正确?
一种可能是f
拆分成一个私有库和一个可执行文件,然后测试拆分后的库。
编辑:
例如,项目结构可以更新为
├── dune
├── f.ml # f only contains the I/O glue code.
├── lib
| ├── dune
| └── a.ml # a implements the features that need to be tested.
└── test
├── dune
└── test.ml # This is the test.
和dune
(executable (name main) (libraries Lib))
为了测试,test/dune
:
(test (name test) (libraries Lib oUnit))
最后 lib/dune
(library (name Lib))
使用此设置,测试可以 运行 和 dune runtest
。
我在 运行 测试 OUnit 时遇到困难,主要是因为我对 dune 和 OUnit 都不熟悉。 dune
抱怨当我 运行 dune runtest
:
File "test/dune", line 4, characters 13-14:
Error: Library "f" not found.
Hint: try: dune external-lib-deps --missing @runtest
项目结构如下:
├── dune
├── f.ml # This is the source file.
└── test
├── dune
└── f_test.ml # This is the test.
这是dune
:
(executable
(name f))
这是test/dune
:
(test
(name f_test)
(libraries oUnit f)) ; <- `f` here causes problems.
我可以看到出现错误是因为 dune 不知道 f.ml
,因此不知道 dune 文件中的 f
。
如何让 dune 编译 f.ml
使 test/dune
知道我在 test/f_test.ml
中使用的 f
库?我怎样才能 运行 单元测试正确?
一种可能是f
拆分成一个私有库和一个可执行文件,然后测试拆分后的库。
编辑:
例如,项目结构可以更新为
├── dune
├── f.ml # f only contains the I/O glue code.
├── lib
| ├── dune
| └── a.ml # a implements the features that need to be tested.
└── test
├── dune
└── test.ml # This is the test.
和dune
(executable (name main) (libraries Lib))
为了测试,test/dune
:
(test (name test) (libraries Lib oUnit))
最后 lib/dune
(library (name Lib))
使用此设置,测试可以 运行 和 dune runtest
。