cover:compile では export_all オプションが無視される

タイトルに書いたとおりなんですけど、mochiweb で EUnit + Cover を採用していて、EUnit 派の自分としてはもちろんがっつり影響されて、Cover を突っ込もうと思ったのですが、少し勝手が違うため四苦八苦中です。

現状

mochiweb ではモジュールに ifdef で eunit が書かれています。自分の場合は test ディレクトリの中にテストモジュールが入っている感じです。この場合内部関数がテスト出来なくなってしまうため、コンパイル時に +export_all を付けてテストをしています。

問題

個人的にモジュールとテストは分離したいので cover:compile(module, [export_all]). とかして cover モジュールでも全ての関数を外だししたいところです「が」、cover:compile では export_all が効かないようです。さらに compile_beam を使ってもだめ。

内部関数のテストは外から呼べないと、困った状況になっています。

解決案

  • 内部関数はモジュールに ifdef を使ってテストを書く
  • なんとかして export_all を動かせるようにする

というなんとも微妙な2案です。おそらく内部関数は内部でイイじゃん。という流れになりそうな気はしていますが ... 。

教えて君

是非 cover:compile で export_all が出来るかどうか知ってる方は教えてくださいませ ... 。また Common Test の場合は内部関数のカヴァレッジはどうやってとっているのでしょうか。

知ってる方教えて頂けると幸いです。

先輩方からのアドバイス

id:cooldaemon 先生からは Common Test は Export されてないのをテスト出来ない。つまるところテスト自体で内部を綺麗にテストしろとのお達しが。まぁそりゃそうですよね。

もう一つ id:cooldaemon 先生からアドバイスを file:compile するときに export_all と debug_info を渡してみるのはどうか、という話を頂きました。

とりあえずは内部に EUnit 書いてみましたが、これを減らせるようにテストを書こうと思います。