Единственный способ разоблачить тесты, не касаясь интерфейса модуля, - это зарегистрировать тесты с помощью некоторого глобального контейнера. Если у вас есть модуль под названием Tests
, который обеспечивает функцию register
, ваш module.ml
будет содержать что-то вроде этого:
let some_test = ...
let() = Tests.register some_test
Я не рекомендую этот подход, поскольку Tests
модуль теряет контроль над тем, что тесты это будет работать.
Вместо этого я рекомендую экспортировать тесты, т. Е. Добавить их в module.mli
.
Обратите внимание, что, не завися от OUnit, вы можете экспортировать тесты следующего типа, которым может управлять любой пользователь. Наши тесты выглядеть следующим образом:
let test_cool_feature() =
...
assert ...;
...
assert ...;
true
let test_super_feature() =
...
a = b
let tests = [
"cool feature", test_cool_feature;
"super feature", test_super_feature;
]
Интерфейс:
...
(**/**)
(* begin section ignored by ocamldoc *)
val test_cool_feature : unit -> bool
val test_super_feature : unit -> bool
val tests : (string * (unit -> bool)) list