不在EUnit中输出异常堆栈跟踪

时间:2012-05-09 02:52:37

标签: erlang eunit

我正在使用EUnit编写测试,但在控制台中没有任何异常详细信息输出。

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

之后的Erlang Shell输出中运行此模块: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 个答案:

答案 0 :(得分: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

我希望这将成为OTP R15的下一个版本。

答案 1 :(得分:7)

这是在R15B和R15B01中发布的eunit中的已知问题。这已在R15B02版本中修复。如果您遇到早期版本,可以下载并应用a patch

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. 下载并应用the patch

    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/ 下方的某处)。

    {{1}}

答案 2 :(得分:4)

Eunit已经很老了,虽然它由爱立信的OTP团队正式维护,但它通常是不受欢迎的。 Eunit目前有吃掉堆栈痕迹的坏习惯,并且在例外情况下没有针对R15的行号进行更新。

我不认为“这就是它应该如何运作”。没有理智的测试工具应该为您隐藏异常细节和行号。

答案 3 :(得分:2)

我喜欢使用的技巧是?debugVal(catch expr),其中expr是begin end块 或者调用失败的功能。例如,?debugVal(catch begin 1 = 2 end)将在测试中输出堆栈跟踪。