Знайомство з 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