Erlang 当?\u assertEqual失败时显示完整的预期和价值信息
我正在编写一个单元测试,其中生成了一个(相当长的)二进制文件,我想断言生成的二进制文件等于我期望生成的二进制文件。我正在通过“钢筋网eunit”运行eunit 问题是,当这个断言失败时,输出会被“…”删节,我希望看到完整的输出,这样我就可以找出差异所在 我现在使用“?debugFmt()”作为临时解决方案,但我想知道是否有替代方案(可以应用于“?\u assertEqual()”的配置选项或参数,因此只有在断言失败时才会显示输出) 提前谢谢 编辑:由于Legocia的回答,我使用测试生成器添加了一个测试样本,其中包含多个断言:Erlang 当?\u assertEqual失败时显示完整的预期和价值信息,erlang,eunit,Erlang,Eunit,我正在编写一个单元测试,其中生成了一个(相当长的)二进制文件,我想断言生成的二进制文件等于我期望生成的二进制文件。我正在通过“钢筋网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个断言)对,刚刚测试了这段代码,它似乎可以工作(请参见编辑)。我一直在寻找一些不太黑客的东西,但这是一个针对特定情况的很好的解决方案,我将接受它,非常感谢:)