【问题标题】:Showing full expected and value information when ?_assertEqual fails?_assertEqual 失败时显示完整的预期和值信息
【发布时间】:2012-06-12 17:52:00
【问题描述】:

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

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

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

提前致谢!

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

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

【问题讨论】:

    标签: erlang eunit


    【解决方案1】:

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

    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]))
    

    【讨论】:

    • 我可以用这个定义一个宏,这是一个不错的技巧:) 到目前为止,最好的选择:P
    • 有什么改变让它可以和测试生成器一起工作吗? (超过 1 个断言)
    • 对,刚刚测试了一小段代码,它似乎可以工作(见编辑)。
    • 我一直在寻找不那么骇人听闻的东西,但它是针对特定情况的一个很好的解决方案,我会接受它,非常感谢 :)
    【解决方案2】:

    我通常实现这一点的方法是让 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 的结果。我发现这些文件在文本编辑器中可读性很强。

    【讨论】:

    • 嗨!好吧,我确实有这些,但我想要一个替代方案,以便可以在控制台中看到它
    【解决方案3】:

    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)。祝你有美好的一天))

    【讨论】:

      【解决方案4】:

      This PRprint_depth 选项引入eunit:test/2

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-04-23
        • 1970-01-01
        • 2011-12-07
        • 2016-03-30
        • 2014-12-01
        • 2020-12-08
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多