Java 如何测试不同虚拟机上两个或多个客户端之间的交互?
我需要在一个完整的端到端测试中测试两个或更多java客户机之间的交互 理想情况下,如果没有GUI,它应该类似于(Junit语法):Java 如何测试不同虚拟机上两个或多个客户端之间的交互?,java,client-server,virtual-machine,acceptance-testing,Java,Client Server,Virtual Machine,Acceptance Testing,我需要在一个完整的端到端测试中测试两个或更多java客户机之间的交互 理想情况下,如果没有GUI,它应该类似于(Junit语法): @试验 公共无效EndToEndTest(){ App firstApp=新App(); App secondApp=新App(); 字符串msg=“某物”; firstApp.send(msg);//此方法将神奇地将msg发送到secondApp 字符串msgReceived=secondApp.getLastMsg(); AssertEquals(msgRec
@试验
公共无效EndToEndTest(){
App firstApp=新App();
App secondApp=新App();
字符串msg=“某物”;
firstApp.send(msg);//此方法将神奇地将msg发送到secondApp
字符串msgReceived=secondApp.getLastMsg();
AssertEquals(msgReceived,msg);
}
上面的代码不是我想要的,因为它使“应用程序”在同一个VM上运行
我自己能够想到的解决方案是,编写一个假的main来实例化secondApps,并将其所有输出写入一个文件,通过系统调用启动它,然后检查结果,但这似乎是一个真正的滥杀。此外,如果采用这样的策略,那么测试GUI将更加困难(如果不是不可能的话)
谢谢您的帮助。过程: 一种解决方案是使用Runtime.exec启动另一个进程,该进程允许您从启动该进程的进程中监视该进程。这个新进程将在另一个JVM上运行。这相当于叉子 在Java中管理另一个进程时,需要处理许多关于线程的警告 本教程应有助于: 沟通: 有几种方法可以让多个进程相互通信。如果您使用的是Runtime.exec,则可以通过每个程序的输入和输出流进行通信 这相当慢,更好的解决方案是使用套接字在每个进程之间直接通信
@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);
}