7

EUnitを使用してテストを作成していますが、コンソールに例外の詳細が出力されることはありません。

exp_test() ->
  ?assertEqual(0, 1/0).

次のErlangシェル出力でこのmodule:exp_test()を実行します

** exception error: bad argument in an arithmetic expression
 in function  exp_test:'-exp_test/0-fun-0-'/1 (src/test/eunit/xxx_test.erl, line 8)

しかし、EUnitの出力では次の

> eunit:test(xxx).
> xxx_test: exp_test...*failed*
  ::badarith

EUnitは例外トレース情報を何も出力しません

eunitで詳細設定を試していますが、効果がありません。

eunitテスト結果に例外の詳細を出力したい。

ありがとう〜

4

4 に答える 4

7

問題は、R15に同梱されているバージョンのeunitがR15の新しいスタックトレース形式を理解していないことのようです。これは、eunitの開発バージョンで修正されています:github.com/richcarl/eunit

例えば:

Eshell V5.10 (abort with ^G)
1> eunit:test(fun() -> (fun() -> exit(foo), ok end)() end).
erl_eval: expr...*failed*
in function erl_eval:do_apply/6 (erl_eval.erl, line 576)
in call from erl_eval:exprs/5 (erl_eval.erl, line 118)
**exit:foo

これがOTPR15の次のリリースになることを願っています。

于 2012-05-10T09:42:23.663 に答える
7

これは、R15BおよびR15B01でリリースされたeunitの既知の問題です。これはリリースR15B02で修正されています。以前のバージョンで立ち往生している場合は、パッチをダウンロードして適用できます。

R15B02より前のリリースの回避策

影響を受けるモジュールを再コンパイルすることにより、ローカルインストールの問題を修正できます。

  1. Erlang / OTPソースをまだ持っていない場合は、ダウンロードして解凍します。

    wget http://www.erlang.org/download/otp_src_R15B01.tar.gz
    tar xzf otp_src_R15B01.tar.gz
    cd otp_src_R15B01
    
  2. パッチをダウンロードして適用します。

    wget -O eunit-stacktrace.patch https://github.com/erlang/otp/commit/73b94a990bb91fd263dace4ccbaef6ff727a9637.patch
    patch -p1 < eunit-stacktrace.patch
    
  3. 再コンパイルしeunit_lib.erlます。

    cd lib/eunit
    erlc -o ebin -I include src/eunit_lib.erl
    
  4. 古いものの上に新しいものをコピーしeunit_lib.beamます(通常は以下のどこかにあります/usr/local)。

    ls /usr/local/lib/erlang/lib/eunit-2.2.2/ebin/
    # check that eunit_lib.beam is actually there
    sudo cp ebin/eunit_lib.beam /usr/local/lib/erlang/lib/eunit-2.2.2/ebin/
    
于 2012-06-22T17:22:55.260 に答える
4

Eunitはかなり古く、EricssonのOTPチームによって公式に保守されていますが、通常は気にかけられていません。Eunitは現在、スタックトレースを使い果たすという悪い癖があり、例外としてR15の行番号が更新されていません。

私は「それが機能することになっている方法」とは主張しません。正常なテストツールで例外の詳細と行番号を非表示にすることはできません。

于 2012-05-09T05:32:11.557 に答える
2

私が使用したいトリックは?debugVal(catch expr)、exprがbegin endブロックまたは失敗した関数の呼び出しのいずれかである場合です。たとえば?debugVal(catch begin 1 = 2 end)、テストでスタックトレースを出力します。

于 2012-07-18T23:06:57.640 に答える