Erlang 当?\u assertEqual失败时显示完整的预期和价值信息

Erlang 当?\u assertEqual失败时显示完整的预期和价值信息,erlang,eunit,Erlang,Eunit,我正在编写一个单元测试,其中生成了一个(相当长的)二进制文件,我想断言生成的二进制文件等于我期望生成的二进制文件。我正在通过“钢筋网eunit”运行eunit 问题是,当这个断言失败时,输出会被“…”删节,我希望看到完整的输出,这样我就可以找出差异所在 我现在使用“?debugFmt()”作为临时解决方案,但我想知道是否有替代方案(可以应用于“?\u assertEqual()”的配置选项或参数,因此只有在断言失败时才会显示输出) 提前谢谢 编辑:由于Legocia的回答,我使用测试生成器添加了

我正在编写一个单元测试,其中生成了一个(相当长的)二进制文件,我想断言生成的二进制文件等于我期望生成的二进制文件。我正在通过“钢筋网eunit”运行eunit

问题是,当这个断言失败时,输出会被“”删节,我希望看到完整的输出,这样我就可以找出差异所在

我现在使用“?debugFmt()”作为临时解决方案,但我想知道是否有替代方案(可以应用于“?\u assertEqual()”的配置选项或参数,因此只有在断言失败时才会显示输出)

提前谢谢

编辑:由于Legocia的回答,我使用测试生成器添加了一个测试样本,其中包含多个断言:

can_do_something(SetupData) ->
    % ... some code ... 
    [?_assertEqual(Expected1, Actual1), ?_assertEqual(Expected2, Actual2)].

我通常实现这一点的方法是让Eunit输出XML文件(采用“Surefire”格式,也称为“Junit”格式)。XML文件对术语打印深度有更高的限制,因此可能包含您需要的信息

将其添加到您的
rebar.config

{eunit_opts, 
 [verbose,
  %% eunit truncates output from tests - capture full output in
  %% XML files in .eunit
  {report,{eunit_surefire,[{dir,"."}]}}]}.

然后您可以在
.eunit/TEST foo.xml
中找到模块
foo
的结果。我发现这些文件在文本编辑器中非常可读。

我能想到的在控制台中实际显示值的最佳方法是:

Actual =:= Expected orelse ?assert(?debugFmt("~p is not ~p", [Actual, Expected]))
?debugFmt
返回
ok
,这不是真的,因此断言总是会失败

或者,要将其用作测试生成器,可以将整个内容放入
?\u assert

?_assert(Actual =:= Expected orelse ?debugFmt("~p is not ~p", [Actual, Expected]))
1) 。打开你的eunit来源。在我的系统中:

cd /usr/lib/erlang/lib/eunit-2.3.2/src
2) 。以以下方式编辑eunit_lib.erl:

diff

54c54
<     format_exception(Exception, 20).
---
>     format_exception(Exception, 99999).
diff
54c54
格式例外(例外,99999)。
3) <代码>sudo erlc-I../include eunit_lib.erl

4) <代码>mv eunit_lib.beam../ebin

5) 。(祝您愉快)

打印深度
选项引入
eunit:test/2

eunit:test(我的测试,[{print\u depth,200}])。
应从OTP-23开始提供


print\u depth
设置为较大的数字将减少输出的截断。

Hi!嗯,我确实有这些,但我想要一个替代方案,这样它可以在控制台中看到。我可以用它定义一个宏,这是一个很好的技巧:)到目前为止,最好的选择是:改变公司,使其与测试生成器一起工作?(不止1个断言)对,刚刚测试了这段代码,它似乎可以工作(请参见编辑)。我一直在寻找一些不太黑客的东西,但这是一个针对特定情况的很好的解决方案,我将接受它,非常感谢:)