我解决了这个问题,只需在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
我必须说我不太了解Ruby,但肯定有一个半可接受的嘲笑框架可以用来解决这个问题吗? –
这不是使用模拟框架的问题,我问如何模拟连接到服务器的连接与交互之间的交互。 :(例如,我想知道如何让'我的课程'意识到它已经获得了连接。EventMachine似乎是通过魔术来实现的 –
一个更好的例子是在C#中(尽管它仍然发生在Ruby中)你有BeginAcceptAsync方法 - 你如何在测试中触发一个事件来说明已经接收到连接(并且因此调用EndAcceptAsync)? –