Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/380.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何测试不同虚拟机上两个或多个客户端之间的交互?_Java_Client Server_Virtual Machine_Acceptance Testing - Fatal编程技术网

Java 如何测试不同虚拟机上两个或多个客户端之间的交互?

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

我需要在一个完整的端到端测试中测试两个或更多java客户机之间的交互

理想情况下,如果没有GUI,它应该类似于(Junit语法):

@试验 公共无效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); }