一种方法是使用rebar3
在测试配置文件下运行 shell,然后启动调试器并设置断点等:
$ rebar3 as test shell
...
1> debugger:start().
{ok, <0.67.0>}
这将弹出调试器 GUI。调试器设置好并准备就绪后,在以下位置运行测试eunit
:
2> eunit:test(your_test_module,[verbose]).
======================== EUnit ========================
your_test_module: xyz_test_ (module 'your_test_module')...
假设您在调试器中设置了一个合适的断点,这会命中它,但您可能会遇到这种方法的问题:默认情况下,eunit
测试会在 5 秒后超时,这不会给您太多的调试时间。您需要为您的测试指定更长的超时时间,这就是为什么上面的示例显示正在运行的是一个名为的测试夹具xyz_test_
,它用较长的超时时间包装实际测试。这样的夹具非常简单:
-include_lib("eunit/include/eunit.hrl").
xyz_test_() ->
{timeout,3600,
[fun() -> ?assertMatch(expected_value, my_module:my_fun()), ok end]}.
在这里,实际的测试是匿名函数,它与 from 的返回值匹配my_module:my_fun/0
,在这个例子中,它代表了被测业务逻辑。这个示例夹具将测试超时设置为一小时;您当然可以根据应用程序的需要进行设置。