模拟网络连接

时间:2014-03-05 12:50:13

标签: ruby unit-testing

我如何模拟网络连接?

假设我正在编写客户端 - 服务器拓扑;客户端已经就位,但是我想在服务器上收到触发事件的网络连接时进行测试;或者是为了响应正在接收的网络连接而调用函数。

我目前正在使用EventMachine,我想弄清楚如何对这些交互进行单元测试,以确保正确处理模拟的网络连接/消息,无需进行集成测试并且实际上必须编写一个将相应的消息发送到测试接口的客户端。我希望这有道理吗?

基本上,我希望能够对服务器进行测试,以确保它能够正确响应模拟消息,而无需打开真正的互联网连接或编写专用客户端进行测试 - 我希望能够能够说'这是我想要收到的信息,现在假装我已经从真实的客户端收到它并处理它'

1 个答案:

答案 0 :(得分:0)

我只是通过在EventMachine中实例化连接类的实例来解决这个问题,而tehn直接调用该方法 - 不确定为什么我一开始没想到它!

describe 'Network manager' do
  it 'should call the ChangeStatus handler when it receives the ChangeStatus packet' do
    # Arrange
    connection = TcpConnection.new
    # Set up the packet handler
    packet_handler = double 'TcpPacketHandler'
    # Inject dependency
    connection.packet_handler = packet_handler
    # Create the message

    data = [ 15, # message code + payload size
      0, # message code
      4, # protocol version
      12, # size of string
    ]

    data.push 'hello, world'.bytes.to_a
    reader, writer = IO.pipe
    writer.write data
    writer.close


    puts data

    # Assert
    expect(packet_handler).to receive(:handle_message).with(data[1], anything()).once

    message = reader.read
    # Act
    connection.receive_data message
  end
end