3

我有一个小应用程序,提供连接(如聊天)。它捕获连接,从中获取登录信息,然后侦听数据并将其广播到每个连接,发送者除外。

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

# 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

1 回答 1

4

如果您只想进行单元测试,您可以使用RSpec 模拟(或其他一些模拟框架)来存根您的方法并确保逻辑按您期望的方式工作。如果您真的想进行集成测试,那需要做更多的工作,并且需要您为套接字创建单独的读取器和写入器,以便您可以实际独立地测试对话的每个部分以获得预期的行为。

其他人显然已经在博客上讨论了与您类似的问题。也许这个例子会对你有所帮助。

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

于 2012-05-03T18:14:03.307 回答