2012-05-03 90 views
3

我有一个小应用程序,服务连接(如聊天)。它捕获连接,从中获取登录信息,然后监听数据并将其广播到每个连接(发件人除外)。测试红宝石TCPSocket服务器

问题是我不是一个非常先进的测试人员,不知道如何测试。

# Handle each connection 
def serve(io) 
    io.puts("LOGIN\n") 
    # Listen for identifier 
    user = io.gets.chomp 

    ... 

    # Add connection to the list 
    @mutex.synchronize { @chatters[user] = io } 

    # Get and broadcast input until connection returns nil 
    loop do 

    incoming = io.gets 
    broadcast(incoming, io) 

    end 
end 

#Send message out to everyone, but sender 
def broadcast(message="", sender) 

    # Mutex for safety - GServer uses threads 
    @mutex.synchronize do 

    @chatters.each do |chatter| 

     socket = chatter[1] 
     # Do not send to sender 
     if sock != sender 

     sock.print(message) 

     end 

    end 

    end 
end 

回答

4

如果你只想做单元测试,你可以使用RSpec mocks(或其他模拟框架)来,踩你的方法,并确保逻辑运作的,你所期望的方式。如果你真的想推动一个集成测试,那将需要更多的工作,并且需要你为套接字创建一个单独的读写器,以便你可以独立地测试每一段对话的预期行为。

其他人显然已经为你的博客写了一篇similar issue。也许这个例子会帮助你。

如果你的问题更多的是关于你应该编写的测试用例,而不是关于如何测试套接字,那么你可能需要重写你的问题,以便答案更符合目标。

+0

谢谢!非常接近答案.. – sadfuzzy