2012-05-03 3 views
3

작은 응용 프로그램이있어 연결 (예 : 채팅)을 제공합니다. 연결을 포착하고 그로부터 로그인 한 다음 데이터를 수신하여 보낸 사람을 제외한 각 연결에 브로드 캐스트합니다.Ruby 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