首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何调试使用rebar3时运行的Eunit测试套件?

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

Stack Overflow用户
提问于 2016-01-07 15:15:56
回答 1查看 1.9K关注 0票数 6

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

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

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

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

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-01-08 01:05:29

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

代码语言:javascript
复制
$ rebar3 as test shell
...
1> debugger:start().
{ok, <0.67.0>}

这将弹出调试器GUI。设置好调试器并准备好之后,在eunit下运行测试

代码语言:javascript
复制
2> eunit:test(your_test_module,[verbose]).
======================== EUnit ========================
your_test_module: xyz_test_ (module 'your_test_module')...

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

代码语言:javascript
复制
-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的返回值相匹配,在本例中,返回值表示测试中的业务逻辑。此示例夹具将测试超时设置为一个小时;当然,您可以根据应用程序的需要设置它。

票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34658714

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档