为gen_tcp函数编写模拟测试用例

时间:2013-09-13 07:22:26

标签: erlang irc eunit meck

这是Erlang编写的一个简单的IRC bot模块: IRC Bot

有人可以帮我编写函数connect的测试用例和用MECK编写parse_line

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 个答案:

答案 0 :(得分:1)

我建议将解析代码和输出代码从其余逻辑中分离出来。几乎没有理由测试这种低级功能,但是如果你在低级接口和代码之间添加了“中间”功能,你甚至可以在不使用Meck的情况下轻松编写测试用例。