Тестовый сервер 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), чтобы заглушить ваши методы и убедиться, что логика работает так, как вы ожидаете. Если вы действительно хотите провести интеграционный тест, это намного больше работы и потребует, чтобы вы создали отдельное устройство чтения и записи для сокета, чтобы вы могли фактически протестировать каждый фрагмент диалога независимо от ожидаемого поведения.
Кто-то еще, по-видимому, писал в блоге о проблеме, аналогичной вашей. Возможно, этот пример поможет вам.
Если ваш вопрос больше касается тестовых случаев, которые вы должны написать, а не о том, как тестировать сокеты, то вы можете переписать свой вопрос, чтобы ответы были более целевыми.