使用 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"}
]}.
有关此主题的更多信息
rebar3 改变了 eunit 测试的执行方式。
原始 rebar2 行为是将您的项目和测试目录(包括子目录)中的任何内容编译到目录 .eunit,然后 运行 从每个文件进行测试。这就是为什么您的 include files 指令可能在 rebar2 下工作的原因仅仅是因为所有文件都被包含和集中了。
Rebar3 相反,默认情况下将测试设置为 [{application, yourapp}]。rebar3 的 eunit 命令首先进行一些准备工作,然后调用 eunit:test(Tests, EUnitOpts)。
注意:
- 可以通过 rebar.config
中的 {eunit_tests, [...]} 指定测试集
- rebar3 具有反映 eunit 测试表示的应用程序、模块、文件和 dir 命令行标志。
http://www.rebar3.org/docs/from-rebar-2x-to-rebar3
由于 rebar3 ct 将考虑所有这些因素,因此可配置性更高且自动化程度更低(不包括您的所有应用程序和部门),这可能会发生在您身上。
使用 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"}
]}.
有关此主题的更多信息
rebar3 改变了 eunit 测试的执行方式。
原始 rebar2 行为是将您的项目和测试目录(包括子目录)中的任何内容编译到目录 .eunit,然后 运行 从每个文件进行测试。这就是为什么您的 include files 指令可能在 rebar2 下工作的原因仅仅是因为所有文件都被包含和集中了。
Rebar3 相反,默认情况下将测试设置为 [{application, yourapp}]。rebar3 的 eunit 命令首先进行一些准备工作,然后调用 eunit:test(Tests, EUnitOpts)。
注意:
- 可以通过 rebar.config 中的 {eunit_tests, [...]} 指定测试集
- rebar3 具有反映 eunit 测试表示的应用程序、模块、文件和 dir 命令行标志。
http://www.rebar3.org/docs/from-rebar-2x-to-rebar3
由于 rebar3 ct 将考虑所有这些因素,因此可配置性更高且自动化程度更低(不包括您的所有应用程序和部门),这可能会发生在您身上。