2016-10-04 5 views
0

Делает библиотеку, которая реализует как клиентские и серверные части, которые взаимодействуют между собой через WebSockets:Dart тест интеграции с сервером и dartium браузером VM

использование сервера, например (побежал в 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: Должен ли я использовать определенную библиотеку ... и т. Д. Распространит вопрос, я думаю, что это довольно неясно atm .. –

+1

I добавили некоторые рекомендации. Я думаю, что 'web_socket_channel' - хорошая ставка. Я использую его вместе с полкой, rpc и mongodb, чтобы иметь полное решение на стороне сервера. Я не уверен, что полностью отвечает на ваш вопрос, но, делая unittests, вы, безусловно, на хорошем пути – alextk

Смежные вопросы