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

Using Rebar3 Common Test does not find hrl files in the include folder but eunit does

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

快速回答:

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 files 指令可能在 rebar2 下工作的原因仅仅是因为所有文件都被包含和集中了。

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

注意:

  1. 可以通过 rebar.config
  2. 中的 {eunit_tests, [...]} 指定测试集
  3. rebar3 具有反映 eunit 测试表示的应用程序、模块、文件和 dir 命令行标志。

http://www.rebar3.org/docs/from-rebar-2x-to-rebar3

由于 rebar3 ct 将考虑所有这些因素,因此可配置性更高且自动化程度更低(不包括您的所有应用程序和部门),这可能会发生在您身上。