我用EUnit写了一个测试,但在控制台中没有任何异常细节输出.
exp_test() ->
?assertEqual(0, 1/0).
Run Code Online (Sandbox Code Playgroud)
运行此模块:下面的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)
Run Code Online (Sandbox Code Playgroud)
但在EUnit输出之后
> eunit:test(xxx).
> xxx_test: exp_test...*failed*
::badarith
Run Code Online (Sandbox Code Playgroud)
EUnit不输出任何异常跟踪信息
我在eunit中尝试了详细的配置,但没有效果.
我想在eunit测试结果中输出一些异常细节.
谢谢〜
问题似乎是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
Run Code Online (Sandbox Code Playgroud)
我希望这将成为OTP R15的下一个版本.
这是在R15B和R15B01中发布的eunit中的已知问题.这已在R15B02版本中修复.如果您遇到早期版本,可以下载并应用补丁:
您可以通过重新编译受影响的模块来解决本地安装中的问题:
如果您还没有Erlang/OTP源,请下载并解压缩它们.
wget http://www.erlang.org/download/otp_src_R15B01.tar.gz
tar xzf otp_src_R15B01.tar.gz
cd otp_src_R15B01
Run Code Online (Sandbox Code Playgroud)下载并应用补丁.
wget -O eunit-stacktrace.patch https://github.com/erlang/otp/commit/73b94a990bb91fd263dace4ccbaef6ff727a9637.patch
patch -p1 < eunit-stacktrace.patch
Run Code Online (Sandbox Code Playgroud)重新编译eunit_lib.erl.
cd lib/eunit
erlc -o ebin -I include src/eunit_lib.erl
Run Code Online (Sandbox Code Playgroud)复制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/
Run Code Online (Sandbox Code Playgroud)Eunit 相当老旧,虽然它由爱立信的 OTP 团队官方维护,但通常无人维护。Eunit 目前有吃掉堆栈跟踪的坏习惯,并且还没有更新 R15 的异常行号。
我不会争辩说“这就是它应该如何工作”。任何理智的测试工具都不应该为您隐藏异常详细信息和行号。