OCaml - функции тестирования, не входящие в подпись - PullRequest
2 голосов
/ 08 декабря 2011

Я пишу тесты для модуля OCaml.Некоторые функции в модуле не предназначены для публичного просмотра, поэтому они не включены в сигнатуру (файл .mli).

Я не могу вызвать эти функции из своих тестов, потому что они не видны за пределами модуля.Поэтому мне сложно их тестировать.Есть ли хороший способ обойти это?Например, способ сказать ocamlc не читать подпись из файла .mli при компиляции тестов?

Ответы [ 2 ]

4 голосов
/ 08 декабря 2011

Некоторые идеи:

  • На самом деле экспортируйте тестовые функции, но используйте функцию остановки комментариев ocamldoc (** / **), чтобы избежать отображения экспорта в документации.
  • Поместите все свои тесты целиком в другой модуль. Однако это сложно, если у вас есть абстрактные типы, потому что вашим тестам вполне может понадобиться доступ к внутренней реализации.
  • Создайте подмодуль Test, в который будут включены все ваши тесты. Таким образом, понятно, какие функции предназначены только для тестирования. Возможно, объедините это с функцией (** / **), чтобы скрыть подмодуль от документации.
1 голос
/ 08 декабря 2011

Я слышал, что люди иногда отделяют свои файлы .mli от своих файлов .ml (в другом каталоге), чтобы они могли скомпилировать их или без них (сообщая ocamlc, смотреть в отдельный каталог или нет).Я только что попробовал несколько экспериментов с этим.Я думаю, что это можно заставить работать, но мне кажется, что это немного ошибочно.Может быть, вы могли бы поместить тесты внутренних функций в модуль.Экспорт тестовых функций может не слишком сильно нарушать модульность.(Хотя, конечно, это загромождает модуль.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...