Использование Rebar3 Common Test не находит файлы hrl в папке include, но eunit делает
С помощью rebar3 eunit
он способен справиться -include("some_file.hrl")
в тестах, но это не работает с rebar3 ct
, По какой-то причине, когда я использую rebar3 ct
он пытается скомпилировать мои тесты eunit и терпит неудачу, потому что не может найти файлы.hrl, используемые в тестах eunit. ...can't find include file "some_file.hrl"
Что я делаю неправильно? Почему он компилирует тесты eunit, когда я пытаюсь запустить тесты CT?
1 ответ
Быстрый ответ:
Дополнительные опции компиляции для 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
Подробнее об этой теме
rebar3 изменить способ выполнения тестов eunit.
Исходное поведение rebar2 состояло в том, чтобы скомпилировать ваш проект и все, что находится в каталоге test (включая подкаталоги), в каталог.eunit, а затем запустить тесты из каждого файла. Вот почему ваша директива включаемых файлов может работать в rebar2 просто потому, что все файлы включены и централизованы.
Вместо этого Rebar3 по умолчанию устанавливает Tests на [{application, yourapp}]. Команда eunit rebar3 сначала выполняет некоторую подготовительную работу, а после этого вызывает eunit:test(Tests, EUnitOpts).
Заметить, что:
- тестовые наборы могут быть указаны с помощью {eunit_tests, [...]} в rebar.config
- rebar3 имеет флаги командной строки application, module, file и dir, которые отражают тестовые представления eunit.
http://www.rebar3.org/docs/from-rebar-2x-to-rebar3
Поскольку rebar3 ct примет все это во внимание, то, будучи более настраиваемым и менее автоматизированным (не включая все ваши приложения и приложения), это может произойти с вами.