EUnit не может проверить частные функции
Я пишу тесты EUnit для кода Erlang.
У меня есть исходный модуль:
-module(prob_list).
-export([intersection/2,union/2]).
probability([], _Item) -> false;
probability([{First,Probability}|Rest], Item) ->
if
First == Item -> Probability;
true -> probability(Rest, Item)
end.
...
...
...
и модуль юнит-тестирования:
-module(prob_list_tests).
-include_lib("eunit/include/eunit.hrl").
-define(TEST_LIST,[{3,0.2},{4,0.6},{5,1.0},{6,0.5}]).
-define(TEST_LIST1,[{2,0.9},{3,0.6},{6,0.1},{8,0.5}]).
-define(TEST_UNO_LIST,[{2,0.5}]).
probability_test() -> ?assertNot(prob_list:probability([],3)),
?assertEqual(0.5,prob_list:probability(?TEST_UNO_LIST,2)),
?assertNot(prob_list:probability(?TEST_UNO_LIST,3)),
?assertEqual(0.2,prob_list:probability(?TEST_LIST,3)),
?assertEqual(1.0,prob_list:probability(?TEST_LIST,5)),
?assertNot(prob_list:probability(?TEST_LIST,7)).
...
...
...
Когда я бегу eunit:test(prob_list,[verbose])
это говорит:
prob_list_tests: probability_test...*failed*
::undef
но когда я экспортирую probability/2
в моем prob_list
Модуль, все в порядке.
Есть ли способ проверить частные функции?
3 ответа
Хорошо, вот и все:
Дклементы дали мне хороший намек на то, как я могу выполнить то, что я просил. Я не хочу помещать все свои тесты в исходный модуль, вы можете увидеть хороший пример разделения: Erlang EUnit - введение
Теперь мое решение - экспортировать все функции при компиляции TEST. Итак, вы положили:
-define(NOTEST, true).
-export([intersection/2,union/2]).
-ifdef(TEST).
-export([intersection/2,union/2,contains/2,probability/2,lesslist/2]).
-endif.
А затем скомпилировать с erlc -DTEST *.erl
запускать тесты и обычную компиляцию для экспорта только необходимых функций.
Общий подход, который я использую для этого, состоит в том, чтобы включить все модульные тесты в один файл и разделить их:
-ifdef (ТЕСТ). -include_lib("eunit/ включить /eunit.hrl"). -endif. %% Функции [...] -ifdef(ТЕСТ). %% модульные тесты идут сюда. -endif.
Это должно позволить вам протестировать ваши личные функции наряду с вашими публичными функциями.
Вы можете использовать директиву -compile(export_all)
условно экспортировать все функции только при компиляции для тестирования:
%% Export all functions for unit tests
-ifdef(TEST).
-compile(export_all).
-endif.