РЕДАКТИРОВАТЬ: Просто понял, что вы использовали common_test
. Пожалуйста, игнорируйте этот ответ, если он не применяется!
У меня есть немного более продвинутый способ тестирования неэкспортированных функций, который имеет преимущество в том, что не экспортирует их, таким образом сохраняя производственный код как можно более неповрежденным (возможны сбои, которые возникают, только если некоторые функции не экспортируются, но не обнаруживается во время тестирования, если все функции экспортированы).
Вот как это работает, используя Rebar и EUnit.
В исходный файл добавьте следующие строки:
-ifdef(TEST).
-include("yourmodule_tests.hrl").
-endif.
В папке test
добавьте файл с именем yourmodule_tests.hrl
(в отличие, например, yourmodule_tests.erl
в обычном случае) и добавьте следующее содержимое:
-include_lib("eunit/include/eunit.hrl").
some_test() ->
?assertEqual(ok, internal_function()).
Добавьте следующую конфигурацию в rebar.config
(если у вас уже есть erl_opts
, просто добавьте новый кортеж в этот список):
{erl_opts, [{i, "test"}]}.
Когда вы запустите rebar eunit
Rebar определит переменную окружения TEST
, и ваш код будет «скомпилирован». То есть, включая ваши тесты в ваш модуль и тесты смогут получить доступ к внутренним функциям.
Если вы используете что-то кроме Rebar, просто убедитесь, что вы компилируете свой код с erlc -DTEST ...
при компиляции для тестов.