Как я могу проверить взаимодействие между 2 или более клиентами на разных виртуальных машинах? - PullRequest
0 голосов
/ 23 августа 2010

Мне нужно проверить взаимодействие между двумя или более Java-клиентами в полном сквозном тесте.

В идеале без графического интерфейса это должно быть что-то похожее (синтаксис Junit):


@Test public void EndToEndTest(){ App firstApp = new App(); App secondApp = new App(); String msg = "something"; firstApp.send(msg); //this method will magically send msg to secondApp String msgReceived = secondApp.getLastMsg(); AssertEquals(msgReceived, msg); }

Код выше не тот, который я хочу, потому что он заставляет «приложения» работать на той же виртуальной машине.

Решение, которое я смог придумать самостоятельно, заключалось в том, чтобы написать поддельный main, который создает экземпляр secondApps и записывает весь его вывод в файл, запускать его с помощью системного вызова, а затем проверять результат, но, похоже, это настоящее излишество. Более того, при такой стратегии было бы сложнее (если не невозможно) протестировать и графический интерфейс.

Спасибо за вашу помощь.

1 Ответ

0 голосов
/ 24 августа 2010

Процесс:

Одним из решений будет использование Runtime.exec для запуска другого процесса, который позволит вам контролировать этот процесс изнутри процесса, который его запустил. Этот новый процесс будет выполняться на другой виртуальной машине Java. Это эквивалентно вилке.

Существует много предостережений, связанных с многопоточностью, которые вам необходимо обработать для управления другим процессом в Java.

Это руководство должно помочь: Когда Runtime.exec () не будет

Сообщение:

Существует несколько способов взаимодействия нескольких процессов друг с другом. Если вы используете Runtime.exec, вы можете общаться как через входящий, так и исходящий потоки каждой программы.

Это довольно медленно, и гораздо лучшим решением было бы использование сокетов для связи между каждым процессом напрямую.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...