2014-03-05 1 views
0

네트워크 연결을 모의 해보면 어떨까요?네트워크 연결 조롱

클라이언트 - 서버 토폴로지를 작성한다고 가정합니다. 클라이언트가 이미 설치되어 있지만 이벤트가 시작된 서버에서 네트워크 연결이 수신되면이를 테스트하고 싶습니다. 또는 수신 된 네트워크 연결에 대한 응답으로 함수가 호출된다는 것을 나타냅니다.

현재 EventMachine을 사용 중입니다. 이러한 상호 작용을 테스트하여 단위 네트워크 연결/메시지가 올바르게 처리되는지 확인하고 싶습니다. 없이 통합 테스트를 수행하고 실제로해야합니다. 테스트 인터페이스에 적절한 메시지를 보낼 클라이언트를 작성하십시오. 나는 이것이 의미가 있기를 바란다.

기본적으로 실제 인터넷 연결을 열거 나 테스팅 전용 클라이언트를 작성하지 않고도 조롱 된 메시지에 올바르게 응답하도록 서버 테스트를 수행 할 수 있기를 원합니다. '이 메시지를 받고 싶습니다. 이제 실제 클라이언트로부터받은 것으로 가장하고 처리합니다.'

+0

나는 Ruby에 대해 많이 알지 못하지만이 문제를 해결하는 데 사용할 수있는 반 수용 가능한 조롱 프레임 워크가있을 것이라고 말해야합니다. –

+0

조롱 프레임 워크를 사용하는 것이 아니라, 서버에 연결하는 연결과 상호 작용 사이의 상호 작용을 조롱하는 방법을 묻습니다. :(예를 들어, 내가 어떻게 클래스를 만들 수 있는지 알아 내고 싶습니다. EventMachine은 마술에 의한 것 같아요. –

+0

더 좋은 예가 C# 일 것입니다 (Ruby에서도 여전히 발생합니다). BeginAcceptAsync 메서드가 있습니다 - 테스트에서 이벤트가 발생하여 연결이 수신되었다고 (따라서 EndAcceptAsync를 호출합니다) –

답변

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