2012-02-10 11 views
4

は、私たちは、私は以下を使用し、このモジュールでexample.erlEUNIT出力テストモジュールからデバッグ情報

と呼ばれるモジュールがデバッグのために構築するとしましょう:

%%% Switch debugging output on/off: 
%-define(DBG(Str, Args), ok). 
-define(DBG(Str, Args), io:format(Str, Args)). 

それはにデバッグ情報を様々な出力に私を助けErlangのシェル:

?DBG("Function fun1 starting... ~n", []) 

しかし、私はexample:test()example_testsからexample.erlを呼び出す場合、この出力情報が表示されません。

EUnitテスト中にどのように表示させることができますか?

UPD:some related infoが見つかりましたが、問題の解決方法はまだわかりません。

答えて

15

あなたが言及したページで説明したように、debugMsgまたはdebugFmtを使用できます。

?debugMsg("Function fun1 starting...") 

または

?debugFmt("Function fun1 starting...", []) 

あなたのモジュールファイルにEUNITのヘッダファイルをインクルードているか確認してください。

-include_lib("eunit/include/eunit.hrl"). 

たとえば、ステージングでデバッグマクロを無効にする場合は、コンパイルモジュールでNODEBUGを定義します。

+0

?debugFmtは正常に機能します。しかし、どうすればすぐにオン/オフを切り替えることができますか?私は2行で定義されたDBGを使用していました(私の質問のように)。私は '-define(dbgFmt(Str、Args)、ok).'を実行しようとしましたが、出力はまだそこにあります。 – skanatek

+4

は '-define(NODEBUG、true).'のようなNODEBUGマクロを定義します。 eunit.hrlを含む** ** BEFORE **を定義してください。 – shino

0

同様の問題があります。 @rvirdingのおかげで別の方法で見つけた。解決方法はユーザー出力ストリーム(io:format(user, "~w", [Term])のように)に書き込むことです。

これは、eunit docsの「EUnitが標準出力をキャプチャする」セクションで説明されています。

マイ "trace.hrl" ファイルを以下に示します。

%% If compiled with {d, TEST, true} 
%% This happens automatically during `rebar3 eunit` 
-ifdef(TEST). 
-define(TRACE(Template, Args), io:format(user, "TRACE ~p:~p ~p~n", [?MODULE, ?LINE, lists:flatten(Args)])). 
-else. 
-define(TRACE(_T, _A), void). 
-endif. 

サンプルのソースファイル:

-module(foo). 
-export([ api/1 ]). 

-include("trace.hrl"). 

api(Arg) -> 
    ?TRACE("Called with Arg ~p~n", [Arg]), 
    ok. 

後者の注入は、あなたに特定のコードをEUNITとして、私は、?debugFmtにこの方法を好みますソーステストではなく)コード。

関連する問題