Написание тестовых примеров Meck для функции gen_tcp

Вот простой модуль IRC для ботов, написанный Erlang: IRC Bot

Может ли кто-нибудь помочь мне написать контрольный пример для функции connect и parse_line с MECK

connect(Host, Port) ->
        {ok, Sock} = gen_tcp:connect(Host, Port, [{packet, line}]),
        % According to RFC1459, we need to tell the server our nickname and username
        gen_tcp:send(Sock, "NICK " ++ ?nickname ++ "\r\n"),
        gen_tcp:send(Sock, "USER " ++ ?nickname ++ " blah blah blah blah\r\n"),
        loop(Sock).

parse_line(Sock, [User,"PRIVMSG",Channel,?nickname|_]) ->
        Nick = lists:nth(1, string:tokens(User, "!")),
        irc_privmsg(Sock, Channel, "You talkin to me, " ++ Nick ++ "?");            

parse_line(Sock, [_,"376"|_]) ->
        gen_tcp:send(Sock, "JOIN :" ++ ?channel ++ "\r\n");

parse_line(Sock, ["PING"|Rest]) ->
        gen_tcp:send(Sock, "PONG " ++ Rest ++ "\r\n");

parse_line(_, _) ->
        0.

Большое спасибо, я уже знаю, как использовать MECK для написания нескольких простых тестовых примеров Erlang для ввода / вывода, списков... но этот бот IRC, похоже, выходит за рамки моих нынешних возможностей.

1 ответ

Я бы предложил разделить ваш код синтаксического анализа и выходной код от остальной части вашей логики. Вряд ли есть какая-либо причина для тестирования такой низкоуровневой функциональности, но если вы добавите функции "между" низкоуровневым интерфейсом и вашим кодом, вы можете легко написать контрольные примеры, даже не используя Meck.

Другие вопросы по тегам