7

我正在用 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

4 回答 4

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 回答
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 的下一个版本。

于 2012-05-10T09:42:23.663 回答
4

Eunit 已经很老了,虽然它由爱立信的 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 回答