我正在尝试将OUnit与OCaml一起使用.
单位代码源(unit.ml)如下:
open OUnit
let empty_list = []
let list_a = [1;2;3]
let test_list_length _ =
assert_equal 1 (List.length empty_list);
assert_equal 3 (List.length list_a)
(* etc, etc *)
let test_list_append _ =
let list_b = List.append empty_list [1;2;3] in
assert_equal list_b list_a
let suite = "OUnit Example" >::: ["test_list_length" >:: test_list_length;
"test_list_append" >:: test_list_append]
let _ =
run_test_tt_main suite
Run Code Online (Sandbox Code Playgroud)
有了ocamlc unit.ml
,我收到了一条错误消息Error: Unbound module OUnit
.为什么是这样?如何在OCaml中使用OUnit.我安装了OUnit opam
.
我在运行 OUnit 测试时遇到困难,主要是因为我对沙丘和 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
Run Code Online (Sandbox Code Playgroud)
这是项目结构:
??? dune
??? f.ml # This is the source file.
??? test
??? dune
??? f_test.ml # This is the test.
Run Code Online (Sandbox Code Playgroud)
这是dune
:
(executable
(name f))
Run Code Online (Sandbox Code Playgroud)
这是test/dune
:
(test
(name f_test)
(libraries oUnit f)) ; <- `f` here causes problems.
Run Code Online (Sandbox Code Playgroud)
我可以看到错误出现是因为沙丘不知道 about f.ml
,因此f
在沙丘文件中不知道。
如何f.ml
以test/dune …
我在文件中有给定的接口规范module.mli
。我必须将其实现写入module.ml
文件中。
module.mli
提供一个抽象类型
type abstract_type
Run Code Online (Sandbox Code Playgroud)
我正在使用 OUnit 来创建测试。我需要在其中使用类型的实现。(例如比较值)一种解决方案是扩展接口以包含测试中使用的附加函数。
但是不修改接口就可以做到这样的事情吗?