我正在編寫Erlang代碼的EUnit測試。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