lib/
dune
src.ml
src.mli
test/
dune
test.ml
都在图书馆中,我正在测试库中的测试,因为我不希望它们包含在库中测试中的Dune文件看起来像:
ppx_inline_test
其他一个是相同的,没有内联测试显然,我无法以这种方式从测试库中访问
(library
(name Test_my_lib)
(preprocess (pps ppx_inline_test ppx_expect))
(libraries base my_other_lib pp ppx_inline_test)
(inline_tests)
)
的函数。
我可以从不同的模块中测试这些功能而不公开它们吗?如果不是,我如何在不备份测试中的其他模块中轻松测试功能(我避免了这一点,主要是因为我认为这是一个好练习)? 我尝试在测试模块中放置一个单独的.MLI文件,其中包括更多定义,但是它抱怨没有找到源。
从编译器的角度来看,测试库并没有什么特别的,因此测试库需求必须在其正在测试的模块的公共界面中。
如果您确实需要一些东西来测试真正不属于公共接口的模块,那么我通常会看到两个选项:
在模块中而不是在单独的库中编写测试内联。如您指出的那样,通常可以避免这种情况,但是在某些情况下是可取的。
在公共界面中展示您需要进行测试所需的值,但以一种清楚的方式表明它们不是真正的公共使用。例如,您可以将这些值放在名为src.ml