使用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"}
]}.
有关此主题的更多信息
rebar3 改变了 eunit 测试的执行方式。
原始的 rebar2 行为是将您的项目和测试目录(包括子目录)中的所有内容编译到目录 .eunit,然后从每个文件运行测试。这就是为什么您的包含文件指令可以在 rebar2 下工作,因为所有文件都被包含并集中。
默认情况下,Rebar3 将 Tests 设置为 [{application, yourapp}]。rebar3 的 eunit 命令首先执行一些准备工作,然后调用 eunit:test(Tests, EUnitOpts)。
请注意:
- 可以通过 rebar.config 中的 {eunit_tests, [...]} 指定测试集
- 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/