Тестовый сервер 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

1 ответ

Решение

Если вы просто хотите выполнить модульное тестирование, вы можете использовать RSpec mocks (или какую-либо другую среду mocking), чтобы заглушить ваши методы и убедиться, что логика работает так, как вы ожидаете. Если вы действительно хотите провести интеграционный тест, это намного больше работы и потребует, чтобы вы создали отдельное устройство чтения и записи для сокета, чтобы вы могли фактически протестировать каждый фрагмент диалога независимо от ожидаемого поведения.

Кто-то еще, по-видимому, писал в блоге о проблеме, аналогичной вашей. Возможно, этот пример поможет вам.

Если ваш вопрос больше касается тестовых случаев, которые вы должны написать, а не о том, как тестировать сокеты, то вы можете переписать свой вопрос, чтобы ответы были более целевыми.

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