我在运行 OUnit 测试时遇到困难,主要是因为我对沙丘和 OUnit 都不熟悉。当我运行 dunedune 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.
我可以看到出现错误是因为沙丘不知道 f.ml ,因此不知道沙丘文件中的 f
我怎样才能让沙丘编译 f.ml 使 test/dune 知道我在 f 中使用的 test/f_test.ml 库?如何正确运行单元测试?

最佳答案

一种可能是将 f 拆分为私有(private)库和可执行文件,然后测试拆分库。
编辑:
例如,项目结构可以更新为

├── 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 运行测试。

关于ocaml - 使用 dune 运行 OUnit 测试,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53317459/

10-09 17:00