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

标签 erlang eunit common-test rebar3

使用rebar3 eunit它能够在测试中处理-include("some_file.hrl"),但这不适用于rebar3 ct 。由于某种原因,当我使用 rebar3 ct 时,它尝试编译我的 eunit 测试并失败,因为它找不到 eunit 测试中使用的 .hrl 文件。 ...找不到包含文件“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,然后从每个文件运行测试。这就是为什么您的包含文件指令可以在 rebar2 下工作,因为所有文件都被包含并集中。

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

请注意:

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

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

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

关于erlang - 使用Rebar3 Common Test在include文件夹中找不到hrl文件,但eunit却找到,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45466590/

相关文章:

Erlang Hot Code Loading 没有被广泛使用?

networking - Erlang:从主机名获取IP地址

erlang - 无法让两个 Erlang 节点进行通信

rest - 二郎 YAWS : How to test a simple REST web service?

erlang - 在 Erlang 模块中包含 EUnit 测试是否被视为良好实践?

erlang - 如何不对 Rebar3 eunit 测试进行符号链接(symbolic link) priv 目录?

makefile - 在 Common Test 测试运行期间,更大的调用失败

erlang - 如何让 Rebar 在发布目录中运行 Common Test?

Erlang - ETS 表之间的比较

erlang - 如何为具有多个应用程序的节点配置覆盖