3

ファイルに特定のインターフェース仕様がありmodule.mliます。その実装をmodule.mlファイルに書き込む必要があります。

module.mli抽象型を提供します

type abstract_type

OUnit を使用してテストを作成しています。それらで型の実装を使用する必要があります。(たとえば、値を比較するため) 1 つの解決策は、インターフェイスを拡張して、テストで使用される追加の関数を含めることです。

しかし、インターフェイスを変更せずにそのようなことを行うことは可能ですか?

4

1 に答える 1

4

モジュール インターフェイスに触れずにテストを公開する唯一の方法は、テストを何らかのグローバル コンテナーに登録することです。Testsfunction を提供するというモジュールがある場合、次のようなものが含まれますregistermodule.ml

let some_test = ...

let () = Tests.register some_test

Testsモジュールは実行するテストを制御できなくなるため、このアプローチはお勧めしません。

代わりに、テストをエクスポートする、つまり に追加することをお勧めしmodule.mliます。

OUnitに依存せずに、誰でも実行できる次のタイプのテストをエクスポートできることに注意してください。テストは次のようになります。

let test_cool_feature () =
  ...
  主張する ...;
  ...
  主張する ...;
  真実

let test_super_feature () =
  ...
  a = b

let テスト = [
  「クールな機能」、test_cool_feature;
  「スーパー機能」、test_super_feature;
]

インターフェイスは次のとおりです。

...
(**/**)
(* ocamldoc によって無視される開始セクション *)

val test_cool_feature : unit -> bool
val test_super_feature : unit -> bool
val テスト : (string * (unit -> bool)) リスト
于 2015-11-04T18:54:47.910 に答える