gpt4 book ai didi

erlang - 来自测试模块的 EUnit 输出调试信息

转载 作者:行者123 更新时间:2023-12-04 09:42:10 24 4
gpt4 key购买 nike

假设我有一个名为 example.erl 的模块

在此模块中,我使用以下构造进行调试:

%%% Switch debugging output on/off:
%-define(DBG(Str, Args), ok).
-define(DBG(Str, Args), io:format(Str, Args)).

它可以帮助我将各种调试信息输出到 Erlang shell:
?DBG("Function fun1 starting... ~n", [])

但是如果我调用 example.erl来自 example_testsexample:test() ,此输出信息不会出现。

如何在 EUnit 测试期间使其可见?

UPD:我找到了 some related info ,但我仍然不知道如何解决这个问题。

最佳答案

遇到了类似的问题。感谢@rvirding,找到了另一种方式。解决方案是写入用户输出流(如 io:format(user, "~w", [Term]) 中)。

这在 eunit docs 的标题为“EUnit 捕获标准输出”的部分中有记录。 .

我的“trace.hrl”文件如下所示:

%% If compiled with {d, TEST, true}
%% This happens automatically during `rebar3 eunit`
-ifdef(TEST).
-define(TRACE(Template, Args), io:format(user, "TRACE ~p:~p ~p~n", [?MODULE, ?LINE, lists:flatten(Args)])).
-else.
-define(TRACE(_T, _A), void).
-endif.

示例源文件:
-module(foo).
-export([ api/1 ]).

-include("trace.hrl").

api(Arg) ->
?TRACE("Called with Arg ~p~n", [Arg]),
ok.

我更喜欢这种方法而不是 ?debugFmt ,因为后者将特定于 EUnit 的代码注入(inject)到您的源(而不是测试)代码中。

关于erlang - 来自测试模块的 EUnit 输出调试信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9233310/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com