Я пишу тесты EUnit для кода Erlang.EUnit не тестирует частные функции
У меня есть модуль источника:
-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
все в порядке.
Есть ли способ проверить частные функции?
Это разумный подход (хотя стоит отметить, что у вас может быть несколько линий экспорта, что может немного почистить), особенно если вы хотите как разделить ваши модульные тесты на отдельные файлы, так и проверить свои частные функции. Единственным недостатком этого подхода является то, что это может привести к тому, что код проходит тест, но не будет работать иначе, если вы случайно используете частные методы вне ваших тестовых файлов. –
Чтобы выставить все на тестовый модуль, вы можете использовать «-compile (export_all)». вместо сохранения большого экспортного заявления. – goertzenator