gpt4 book ai didi

debugging - 如何调试使用 rebar3 时运行的 Eunit 测试套件?

转载 作者:行者123 更新时间:2023-12-02 23:13:35 28 4
gpt4 key购买 nike

我使用 rebar3 (beta-4) 创建了一个 release 应用程序。添加了一些 eunit 测试并编写了一些代码。

现在我必须调试一个测试用例,看看我必须添加什么才能使实现正常工作。

我找到了一些关于从 Erlang 控制台使用 dbg 的文章,并且找到了如何从 Eunit 编写调试信息。但我需要从我必须测试的代码中获取信息(实际实现(逻辑))。

rebar3eunit 参数一起使用时,是否有一种方法可以调试 Erlang 代码(实际源代码,而不是测试代码)?

我正在终端中使用跟踪,如下所示:https://aloiroberto.wordpress.com/2009/02/23/tracing-erlang-functions/

最佳答案

实现此目的的一种方法是使用 rebar3 在测试配置文件下运行 shell,然后启动调试器并设置断点等:

$ rebar3 as test shell
...
1> debugger:start().
{ok, <0.67.0>}

这将弹出 debugger GUI 。调试器设置并准备就绪后,在 eunit 下运行测试:

2> eunit:test(your_test_module,[verbose]).
======================== EUnit ========================
your_test_module: xyz_test_ (module 'your_test_module')...

假设您在调试器中设置了合适的断点,这将会命中它,但是您可能会遇到这种方法的问题:默认情况下,eunit 测试在 5 秒后超时,这不会给您太多时间进行调试。您需要指定 longer timeout对于您的测试,这就是为什么上面的示例显示正在运行的是 test fixture名为xyz_test_,它用长超时包装了实际测试。这样的装置非常简单:

-include_lib("eunit/include/eunit.hrl").

xyz_test_() ->
{timeout,3600,
[fun() -> ?assertMatch(expected_value, my_module:my_fun()), ok end]}.

这里,实际测试是匿名函数,它与 my_module:my_fun/0 的返回值匹配,在本例中代表了被测试的业务逻辑。此示例装置将测试超时设置为一小时;您当然可以根据您的应用程序的需要进行设置。

关于debugging - 如何调试使用 rebar3 时运行的 Eunit 测试套件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34658714/

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