1

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

4

1 回答 1

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,然后从每个文件运行测试。这就是为什么您的包含文件指令可能在 rebar2 下工作的原因仅仅是因为所有文件都被包含和集中。

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

请注意:

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

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

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

于 2017-08-03T09:53:40.643 回答