Знайомство з Erlang [25]
Unit тести в erlang з EUnit
Unit тести пишуть в тому ж модулі, функції з якого потребують тестування.
напишемо невеликий модуль з однієї функцією та unit тестом:
файл func1.erl
-module(func1).
-export([my_func/2]).
my_func(A, B) ->
A + B.
-ifdef(TEST).
-include_lib("eunit/include/eunit.hrl").
my_func_test() ->
?assertEqual(4, my_func(2, 2)),
?assertEqual(5, my_func(2, 3)),
?assertEqual(5, my_func(6, -1)).
my_func2_test() ->
?assertEqual(3, my_func(1, 1)).
my_func3_test() ->
?assert(erlang:is_number( my_func(1, 2) )).
my_func4_test() ->
?assertError(badarith, my_func(1, 0) / 0 )).
-endif.
скомпілюємо цей модуль з тестами
$ erlc -DTEST func1.erl
# or
1> c(func1, {d, TEST}).
{ok, func1}
2> eunit:test(func1).
ok
Пояснення
назва функції тесту повинна закінчуватись на _test()
макрос ?assert очікує Boolean_Expression
макрос ?assertNot еквівалент ?assert(not(Boolean_Expression))
макрос ?assertEqual матчить значення на рівність
макрос ?assertError матчить тип помилки
також існують макроси ?assertMatch, ?assertNotMatch, ?assertException, ?assertExit, ?assertThrow
замість макроса TEST можна використовувати EUNIT, деталі див. в документації (лінк нижче)
Посилання
https://www.erlang.org/doc/apps/eunit/chapter.html
https://learnyousomeerlang.com/eunit
https://www.erlang.org/doc/man/eunit.html