使用Rebar3 Common Test在include文件夹中找不到hrl文件,但是eunit没有

时间:2017-08-02 16:45:42

标签: erlang eunit common-test rebar3

使用rebar3 eunit,它可以在测试中处理-include("some_file.hrl"),但这不适用于rebar3 ct。出于某种原因,当我使用rebar3 ct时,它会尝试编译我的eunit测试并失败,因为它无法找到eunit测试中使用的.hrl文件。 ...can't find include file "some_file.hrl"我做错了什么?当我试图进行CT测试时,为什么要编译eunit测试?

1 个答案:

答案 0 :(得分:2)

快速回答:

eunit的其他编译选项。 erl_opts可以像rebar3一样使用:

{eunit_compile_opts, [
{i, "custominclude"},
{i, "include"},
{i, "deps/nice/include"},
{i, "/usr/lib64/erlang/lib/some-1.3.0/include"}
]}.

https://github.com/erlang/rebar3/blob/fb363cd8de68e9113e407ac0be049cacdd9ddd07/rebar.config.sample#L165

有关此主题的更多信息

rebar3改变了执行eunit测试的方式。

原始的rebar2行为是将您的项目和测试目录中的任何内容(包括子目录)编译到目录.eunit,然后从每个文件运行测试。这就是为什么你的include文件指令可以在rebar2下工作,因为所有文件都包含在内并集中在一起。

默认情况下,Rebar3将测试设置为[{application,yourapp}]。rebar3的eunit命令首先进行一些准备工作,然后调用eunit:test(测试,EUnitOpts)。

请注意:

  1. 测试集可以通过rebar.config中的{eunit_tests,[...]}指定
  2. rebar3具有镜像eunit测试表示的应用程序,模块,文件和目录命令行标志。
  3. http://www.rebar3.org/docs/from-rebar-2x-to-rebar3

    由于rebar3 ct会将所有这些考虑在内,更具可配置性和自动化程度更低(不包括所有应用程序和deps),这可能会发生在你身上。