2010-08-23 5 views
0

완벽한 엔드 투 엔드 테스트에서 두 개 이상의 Java 클라이언트 간의 상호 작용을 테스트해야합니다.
다른 VM에서 둘 이상의 클라이언트 간의 상호 작용을 테스트하려면 어떻게해야합니까?


@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에서 실행되는 "응용 프로그램"을 만들기 때문에 내가 원하는되지 않습니다 : GUI에없이

는 이상적으로는 (의 JUnit 구문) 비슷한해야합니다.

내 스스로 생각할 수있는 솔루션은 secondApp를 인스턴스화하고 모든 출력을 파일에 쓰고 시스템 호출로 실행 한 다음 결과를 확인하는 것입니다. 진짜 과잉. 또한 이와 같은 전략을 사용하면 GUI를 테스트하는 것이 더 어렵습니다 (불가능하지는 않지만).

도움 주셔서 감사합니다.

답변

0

프로세스 :

하나의 솔루션 당신이 그것을 실행하는 프로세스 내에서 해당 프로세스를 모니터링 할 수 있도록 할 다른 프로세스를 시작 Runtime.exec의을 사용하는 것입니다. 이 새로운 프로세스는 다른 JVM에서 실행됩니다. 그것은 포크와 같습니다.

Java 내에서 다른 프로세스를 관리하기 위해 처리해야하는 스레딩을 처리하는 많은주의 사항이 있습니다.

이 튜토리얼은 도움이 될 것입니다 When Runtime.exec() won't

통신 :

여러 프로세스가 서로 통신 할 수있는 방법의 몇 가지 유형이 있습니다. Runtime.exec를 사용하는 경우 각 프로그램의 내부 및 외부 스트림을 통해 통신 할 수 있습니다.

이것은 매우 느리고 더 나은 해결책은 소켓을 사용하여 각 프로세스를 직접 통신하는 것입니다.

관련 문제