2011-12-08 6 views
2

OCamlモジュールのテストを書いています。モジュールの一部の機能は公開されていないため、署名(.mliファイル)には含まれていません。OCaml - 署名に含まれていないテスト関数

これらの関数は、モジュールの外部には表示されないため、私のテストから呼び出すことはできません。だから私はそれらをテストするのに苦労している。これを回避する良い方法はありますか?たとえば、ocamlcが.mliファイルから署名を読み取ってテストをコンパイルしていないと伝える方法はありますか?

答えて

4

いくつかのアイデア:

  • は、実際にテスト関数をエクスポートしますが、中輸出を表示するようなときにはocamldocのストップコメント(**/**)機能を使用しますドキュメンテーション。
  • すべてのテストを完全に別のモジュールに入れます。しかし、テストで内部実装へのアクセスが非常に必要な場合があるため、抽象型を使用するとこれは困難です。
  • すべてのテストが行​​われるサブモジュールTestを作成します。このようにして、どの機能がテストのためだけであるかは明らかです。おそらくこれを(**/**)機能と組み合わせて、サブモジュールをドキュメントから隠すこともできます。
+0

今のところ私はあなたの最初の提案をしています。最も簡単な解決策のようです。 – declan

1

私は、人が.mliファイルを(別のディレクトリにある).mlファイルから分離することがあると聞いたことがあります。これは、ocamlcに別のディレクトリを探すかどうかを指示することでコンパイルすることができます。私はちょうどこれでいくつかの実験を試みた。私はそれを働かせることができると思うが、それは私に多少の誤りを起こしやすいようだ。おそらく、内部関数のテストをモジュールに入れることができます。テスト関数をエクスポートすることは、モジュール性に悪影響を与えることはありません。 (もちろんけれども、それクラッタアップモジュールを。)

+0

.mliファイルを別のディレクトリに配置しようとしました。これはうまくいくと思われますが、最後には、停止コメント(**/**)を使用するというAshishの提案に行くつもりだと思っています。 +1、良い提案。 – declan

関連する問題