我正在编写一个单元测试,其中生成一个(相当冗长的)二进制文件,我想断言生成的二进制文件等于我期望生成的二进制文件。我正通过“ rebar eunit ”运行eunit。
事情是,当这个断言失败时,输出会被“ ... ”所取代,我希望看到完整的输出,这样我就可以发现差异在哪里。
我现在正在使用“?debugFmt()”作为临时解决方案,但我想知道是否有替代方案(可在某处使用配置选项或参数)到“?_ assertEqual()”所以输出仅在断言失败时显示。)
提前致谢!
编辑:由于 legoscia的答案,我使用测试生成器包含一个测试样本,有多个断言:
can_do_something(SetupData) ->
% ... some code ...
[?_assertEqual(Expected1, Actual1), ?_assertEqual(Expected2, Actual2)].
答案 0 :(得分:4)
我能想到的在控制台中实际显示值的最佳方法是:
Actual =:= Expected orelse ?assert(?debugFmt("~p is not ~p", [Actual, Expected]))
?debugFmt
返回ok
,这不是真的,所以断言总会失败。
或者,要将它用作测试生成器,整个事物可以放在?_assert
内:
?_assert(Actual =:= Expected orelse ?debugFmt("~p is not ~p", [Actual, Expected]))
答案 1 :(得分:4)
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).
3)。 sudo erlc -I ../include eunit_lib.erl
4)。 mv eunit_lib.beam ../ebin
5)。祝你有个美好的一天))
答案 2 :(得分:3)
我通常实现这一点的方法是使Eunit输出XML文件(采用“Surefire”格式,AKA“Junit”格式)。 XML文件对术语打印深度有更高的限制,因此可能包含您需要的信息。
将此添加到您的rebar.config
:
{eunit_opts,
[verbose,
%% eunit truncates output from tests - capture full output in
%% XML files in .eunit
{report,{eunit_surefire,[{dir,"."}]}}]}.
然后,您可以在foo
中找到模块.eunit/TEST-foo.xml
的结果。我发现这些文件在文本编辑器中非常易读。
答案 3 :(得分:3)
This PR向print_depth
引入了eunit:test/2
选项:
eunit:test(my_test, [{print_depth, 200}]).
它应该从OTP-23开始可用。
将print_depth
设置为更大的数字将减少输出的截断。