2013-03-15 6 views

答えて

12

不可能です。 -ifdef(TEST).プリプロセッサ条件を使用して、テストのためにコンパイルするときにのみこれらの関数をエクスポートすることができます。

+0

私はこれを試しました -ifdef(TEST)。 -export([ generate_perm_list/2 ])。 -endif。 私のモジュールでは、テストマクロが一般的なテストで定義されていないようです。 Common Testで定義されている他のマクロはありますか? –

+0

自分で定義したTESTマクロでテストするためにモジュールをコンパイルする必要があります。 '{d、 'TEST'}'コンパイラオプションまたは-DTESTコンパイルフラグを使って、これを行うことができます。 –

+0

ありがとうございました –

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