我正在为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但是,当我在prob_list模块中导出prob_list时,一切正常。
有任何方法测试私有函数吗?
发布于 2011-11-13 11:01:52
好的,下面是:
dclements给了我一个很好的提示,告诉我如何完成我的要求。我不想把所有的测试都放在源代码模块中,您可以在这里看到一个很好的分离示例:二郎EUnit -游戏攻略
现在,我的解决方案是导出测试编译中的所有函数。所以你说:
-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编译来运行测试,而普通编译只导出所需的函数。
发布于 2013-05-30 16:23:08
您可以使用指令-compile(export_all)有条件地导出所有函数,只导出为测试而编译时。
%% Export all functions for unit tests
-ifdef(TEST).
-compile(export_all).
-endif.https://stackoverflow.com/questions/8108624
复制相似问题