5

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

问题是,当这个断言失败时,输出会缩写为“ ... ”,我想查看完整的输出,以便找出不同之处。

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

提前致谢!

编辑:由于legoscia的回答,我包括一个使用测试生成器的测试样本,有多个断言:

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

4 回答 4

6

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

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]))
于 2012-06-15T16:57:37.540 回答
4

我通常实现这一点的方法是让 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,"."}]}}]}.

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

于 2012-06-15T16:44:34.400 回答
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)。祝你有美好的一天))

于 2017-02-15T02:49:59.440 回答
3

此 PR介绍了以下print_depth选项eunit:test/2

eunit:test(my_test, [{print_depth, 200}]).

它应该从 OTP-23 开始可用。

设置print_depth为较大的数字将减少输出的截断。

于 2020-03-25T16:08:15.730 回答