Tôi đang viết kiểm tra EUnit cho mã Erlang.EUnit không kiểm tra chức năng riêng tư
Tôi có một mô-đun nguồn:
-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.
...
...
...
và một module đơn vị kiểm tra:
-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)).
...
...
...
Khi tôi chạy eunit:test(prob_list,[verbose])
nó nói:
prob_list_tests: probability_test...*failed*
::undef
nhưng khi tôi xuất probability/2
trong mô-đun prob_list
của tôi, mọi thứ đều ổn.
Có cách nào để kiểm tra các chức năng riêng tư không?
Đó là một cách tiếp cận hợp lý (mặc dù đáng chú ý là bạn có thể có nhiều dòng xuất, có thể làm sạch mọi thứ), đặc biệt nếu bạn muốn tách riêng các bài kiểm tra đơn vị thành các tệp riêng biệt và kiểm tra các chức năng riêng của bạn. Một nhược điểm của phương pháp này là điều này có thể dẫn đến mã vượt qua kiểm tra nhưng sẽ không chạy nếu bạn vô tình sử dụng các phương thức riêng bên ngoài các tệp thử nghiệm của bạn. –
Để hiển thị mọi thứ cho mô-đun thử nghiệm, bạn có thể sử dụng "-compile (export_all)". thay vì duy trì một tuyên bố xuất khẩu lớn. – goertzenator