2010-08-23 6 views
0

Мне нужно протестировать взаимодействие между 2-мя и более 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); }

Код выше не то, что я хочу, потому что это делает «приложения» работают на одной и той же VM.

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

Благодарим за помощь.

ответ

0

процесса:

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

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

Это руководство должно помочь: When Runtime.exec() won't

Связь:

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

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