2016-10-04 2 views
0

내가 WebSocket을 통해 그들 사이에 상호 작용하는 서버 및 클라이언트 부분 구현하는 라이브러리 만들고있어 :다트 통합 테스트가

서버 사용 예제 (CLI에서 실행) :

Server srv = await new Server("localhost:1234"); 
srv.onNewClientConnected.listen(print("client connected")); 

클라이언트 사용 예제 (브라우저에서 실행) :

Client cli = await new Cliente("localhost:1234"); 
cli.sendCommand(...); 

(그냥 인스턴스를 생성하여, 클라이언트가 연결되어야하고 서버가 해당 연결에 대해주의.)

상호 작용을 테스트하는 가장 좋은 방법은 무엇입니까? 그 방법으로 두 개체 내부를 모두 확인할 수 있습니까? ,

test(".echo should receive same input from server",(){ 
    cli.echo("message"); 
    expect(srv.lastMessageReceived, equals("echo: message")); 
    expect(cli.lastResponseReceived, equals("echo: message")); 
    expect(srv.amountMessagesReceived, equals(1)); 
}); 

답변

1

만약 내가 제대로 이해하고 난 당신이 연결된 경우에만 인스턴스를 가질 수 있도록 도우미로 https://www.dartlang.org/dart-vm/dart-by-example#websockets을 캡슐화하려고 같은데요 :

나는 이런 일을하고 싶습니다. 그러나 두 작업 (서버 쪽 바인딩/수신 대기/업그레이드, 클라이언트 쪽 연결)은 비동기 적이므로 인스턴스를 만들면 원하는 상태에 도달하지 못합니다 (또는 알림을 받기 위해 추가 비동기 메서드가 필요합니다). 비동기 헬퍼를 만드는 것이 좋습니다.

당신이 당신의 서버에 하나의 클라이언트를 받아 가정

Server server = await Server.accept("localhost:1234"); 

클라이언트 측 :

내가 좋아하는

를 연결했을 때 그렇게함으로써

Client client = await Client.connect("localhost:1234"); 

, 당신은 단지 서버와 클라이언트 인스턴스를해야합니다 https://pub.dartlang.org/packages/web_socket_channel 패키지는 좋은 추상화를 제공하며 간단한 io 테스트에서 브라우저에서 실행되는 웹 소켓 클라이언트 로직을 테스트 할 수 있습니다.

테스트 권장 사항은 개인적으로 setUpAll에 웹 소켓 서버를 시작하고 setUp에 내 클라이언트를 만들고 사용자가 제안한 것과 비슷한 로직을 사용합니다 (에코 응답을 기다릴 필요가 있음을 잊지 마십시오.). 다시 web_socket_channel 패키지에는 (https://github.com/dart-lang/web_socket_channel/tree/master/test)

+0

답변을 주셔서 감사합니다. 하지만 그 문제는 없지만 Dart에서 이러한 종류의 통합 테스트를 실행하는 모범 사례가 있습니다. 특정 라이브러리를 사용해야합니까 ... 등 질문을 확장 할 예정입니다. 매우 불투명합니다. –

+1

I 몇 가지 권장 사항을 추가했습니다. 나는'web_socket_channel'이 좋은 선택이라고 생각한다. 선반, rpc 및 mongodb와 함께 전체 서버 측 솔루션을 사용합니다. 나는 당신의 질문에 완전히 답하는 것이 확실치 않지만, unittests를함으로써 당신은 확실히 좋은 길을 가고 있습니다. – alextk

관련 문제