Erlangでエクスポートされていない関数を持つErlangにモジュールがあります。 一般的なテストフレームワークを使用してこれらの関数をテスト/コールするにはどうすればよいですか?共通テストを使用したモジュールのErlangテスト(非エクスポート/非公開)機能
7
A
答えて
12
不可能です。 -ifdef(TEST).
プリプロセッサ条件を使用して、テストのためにコンパイルするときにのみこれらの関数をエクスポートすることができます。
0
プライベート関数を自分のモジュールに入れて、すべてをエクスポートすることができます。元のモジュールはそれらをインポートすることができ、それらは非公開になり、テストフレームワークは専用モジュールを直接インポートすることができます。
1
Common Testでは扱いにくいですが、モジュール内のプライベート関数をテストするために組み込みのテストケースを使用することは可能です。 Common Testを使用してパブリックインターフェイスをテストすることができます。 Rebarは、rebar test
を実行すると自動的に埋め込みテストケースを検出します。あなたが(またはその一部)モジュールを離れて模擬する必要がある場合EUNITでテストするとき、あなたは自分の好みに合わせてMeckを見つけるかもしれない
-module(example).
-export([public/1]).
-ifdef(TEST).
-include_lib("eunit/include/eunit.hrl").
-endif.
%% This function will be tested externally using Common Test
public(Foo) ->
private(Foo + 42).
%% This function is not reachable to CT, so it will be tested using EUnit.
private(Bar) ->
Bar * 2.
%%% Tests
-ifdef(TEST).
private_test() ->
?assertEqual(10, private(5)),
?assertEqual(0, private(0)).
-endif.
サイドノートで:
は、ここでの例です。
EUnitへの穏やかな紹介については、Learn You Some Erlang chapterを参照してください。
0
誰かがこの問題を抱えている場合もあります。 eunit.hrlファイルをインクルードすると、インクルードの前にNOTESTが定義されていない限り、TESTが定義されます。 -include_lib( "eunit.hrl")。 ref:http://www.erlang.org/download/eunit.hrl
私はこれを試しました -ifdef(TEST)。 -export([ generate_perm_list/2 ])。 -endif。 私のモジュールでは、テストマクロが一般的なテストで定義されていないようです。 Common Testで定義されている他のマクロはありますか? –
自分で定義したTESTマクロでテストするためにモジュールをコンパイルする必要があります。 '{d、 'TEST'}'コンパイラオプションまたは-DTESTコンパイルフラグを使って、これを行うことができます。 –
ありがとうございました –