I think there is some missing functionality in OCaml: a mechanism to grant access to something that is normally hidden. This is not only important for unit testing but for debugging in general (remember that even ocamldebug cannot break module abstractions). What about this idea: modules (and only modules) can have associated visibility attributes. These are set with the definition or in the signature, e.g. module Implementation { "debug" } = struct ... end and are part of the cmi file. This imposes a restriction on the module path - Implementation may then only occur as part of a module path if it is explicitly allowed (e.g. that could be a command-line switch, and the debugger would allow everything). When using this technique, you'd normally put everything into an Implementation sub-module that is access-protected, and you'd redefine what is part of the regular interface: module Implementation { "debug" } = struct ... end import Implementation (* or redefine definition by definition: let my_function = Implementation.my_function *) And in the mli (which may now even be superfluous unless you want to document the API): val my_function : ... module Implementation { "debug" } : sig ... end If there was a special ANY module type that unifies with anything: module Implementation { "debug" } : ANY This would then simply export all definitions. There could be additional utilities for stripping definitions with access control tokens from the cmi files. The whole point is to grant the developer of a certain library more rights than the user of a library. Gerd Am Sonntag, den 28.09.2014, 19:06 -0400 schrieb Eric Cooper: > I'd like to write unit tests for functions not exported in a .mli > file. The only way I can see is to remove the .mli file while > building the test, so the whole .ml file is visible. Is there a better > way, preferably integrated with ocamlmake + findlib? > > -- > Eric Cooper e c c @ c m u . e d u > -- ------------------------------------------------------------ Gerd Stolpmann, Darmstadt, Germany gerd@gerd-stolpmann.de My OCaml site: http://www.camlcity.org Contact details: http://www.camlcity.org/contact.html Company homepage: http://www.gerd-stolpmann.de ------------------------------------------------------------