Erlang ct:运行测试依赖项

Erlang ct:运行测试依赖项,erlang,common-test,Erlang,Common Test,我尝试使用以下命令从erl shell运行公共测试套件: > ct:run_test([{spec,"test/spec"}]). 测试套件失败,出现错误: undefined function eredis:start_link/3 但如果我在shell中键入以下内容: > eredis:module_info(). 我可以看到相关模块eredis已加载: [{exports,[{start_link,0}, {start_link,2}, ... {start_link,6

我尝试使用以下命令从erl shell运行公共测试套件:

> ct:run_test([{spec,"test/spec"}]).
测试套件失败,出现错误:

undefined function eredis:start_link/3
但如果我在shell中键入以下内容:

> eredis:module_info().
我可以看到相关模块eredis已加载:

[{exports,[{start_link,0},
{start_link,2},
...
{start_link,6},
...

为什么ct:run\u测试没有看到依赖模块以及如何从erl shell正确运行它?

我发现问题不在依赖中。 我写的样本再现了这个问题

从erlang shell运行ct:run_test/1时,应始终设置ebin目录的绝对路径(使用-pa选项)。

否则,使用以下命令从erlang shell启动常见测试:

$ ./rebar3.1 compile && erl -pa _build/default/lib/ct_fail/ebin/
> ct:run_test([{spec,"test/spec"}]).
将失败并出现错误:

=== ERROR! init_per_testcase crashed!
    Location: [{ct_fail,start_link},
 {fail_SUITE,init_per_testcase,16},
 {test_server,do_init_per_testcase,1191},
 {test_server,run_test_case_eval1,955},
 {test_server,run_test_case_eval,926}]
    Reason: {undef,[{ct_fail,start_link,[1,2],[]},
                        {fail_SUITE,init_per_testcase,2,
                                    [{file,"fail_SUITE.erl"},{line,16}]},
                        {test_server,do_init_per_testcase,2,
                                     [{file,"test_server.erl"},{line,1191}]},
                        {test_server,run_test_case_eval1,6,
                                     [{file,"test_server.erl"},{line,955}]},
                        {test_server,run_test_case_eval,9,
                                     [{file,"test_server.erl"},{line,926}]}]}
最有趣的是,在测试运行之前执行
module\u info
命令时:

$ ./rebar3.1 compile && erl -pa _build/default/lib/ct_fail/ebin/
> ct_fail:module_info().
ct_fail:module_info().
[{module,ct_fail},
 {exports,[{start_link,0},
           {start_link,1},
           {start_link,2},
           {start_link,3},
           {start_link,4},
           {init,1},
           ...

> ct:run_test([{spec,"test/spec"}]).
那么测试就会成功

顺便说一下,当测试失败时:

$ ./rebar3.1 compile && erl -pa _build/default/lib/ct_fail/ebin/
> ct:run_test([{spec,"test/spec"}]).
...
导致测试失败的函数调用从模块导出列表中消失:

> ct_fail:module_info().
[{module,ct_fail},
 {exports,[{start_link,0},
           {start_link,1},
           {start_link,3},
           {start_link,4},
           {init,1},
           ...

ct\u失败:启动链接/2
不再导出

eredis
eredis\u client
是两个独立的模块。是我的打字错误。实际上,eredis_客户端是的一部分,它也已加载:
>eredis:module_info()。[{导出,[{开始链接,0},{开始链接,2},{开始链接,6}
ct:run\u test针对两个不同的测试运行给了我两个不同的错误,但现在我想弄清楚ct:run\u test命令失败的原因。您的问题现在没有在导出列表中列出
start\u link/3
,错误是抱怨它不存在。是否确实导出了
start\u link/3
请适当地编辑问题。