Все записи автора Sepuka

Бесплатный совет

Существуют люди которые когда пишут код в vim запускают тесты из него же, не переключаясь на консоль.
Они просто не знают что если войти в режим команд и набрать ! то все что будет напечатано после этого будет выполнено в консоли, кроме этого символ % будет заменен на текущее имя файла. Более продвинутые знатоки еще и ремапят мнемокоды для этого и получается вообще крутяк.

eunit + proper

Я бы хотел хранить тесты каждого модуля в отдельном файле и запускать юнит-тесты одной командой одновременно выполняя как eunit так и proper. При этом мне было не понятно как запускать proper выполняя eunit. Идея писать тест оканчивающийся на _test и в нем выполнять что-то вроде proper:quickcheck мне совсем не нравилась, типа один фреймворк вместо того чтобы гонять тесты дергает другой фреймворк, некрасиво выглядит. Что если создать, например, hrl хелпер содержащий код вроде

-include_lib("eunit/include/eunit.hrl").

run_proper_test_() ->
EunitLeader = erlang:group_leader(),
erlang:group_leader(whereis(user), self()),
Res = proper:module(?MODULE),
erlang:group_leader(EunitLeader, self()),
?_assertEqual([], Res).

Код переопределения group leader взят отсюда

В результате получается что в модуле с eunit достаточно подключить наш hrl и все функции начинающиеся с prop_ будут найдены proper’ом и протестированы, eunit же возьмет свои функции и пройдется по ним.

Не особо задумывался над самим термином «бинарный» или «тернарный»  в контексте функций, пока не начал изучать эрланг, там термин «арность» очень широко распространен. Кроме этого, Мартин Фаулер в своей книге о чистом коде пишет о количестве параметров в функциях и оперирует этими терминами, он говорит что функции бывают:

  • нуль-арные
  • унарные
  • бинарные
  • тернарные
  • полиарные

И это всем ясно, но спроси у программиста что такое арность и он задумается что сказать.