我如何模拟网络连接?
假设我正在编写客户端 - 服务器拓扑;客户端已经就位,但是我想在服务器上收到触发事件的网络连接时进行测试;或者是为了响应正在接收的网络连接而调用函数。
我目前正在使用EventMachine,我想弄清楚如何对这些交互进行单元测试,以确保正确处理模拟的网络连接/消息,无需进行集成测试并且实际上必须编写一个将相应的消息发送到测试接口的客户端。我希望这有道理吗?
基本上,我希望能够对服务器进行测试,以确保它能够正确响应模拟消息,而无需打开真正的互联网连接或编写专用客户端进行测试 - 我希望能够能够说'这是我想要收到的信息,现在假装我已经从真实的客户端收到它并处理它'
答案 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