如何测试不同VM上2个或更多客户端之间的交互?

时间:2010-08-23 18:11:05

标签: java client-server virtual-machine acceptance-testing

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

理想情况下,如果没有GUI,它应该类似于(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); }

上面的代码不是我想要的,因为它使“app”在同一个VM上运行。

我能够独立思考的解决方案是编写一个虚假的main来实例化secondApps并将其所有输出写入文件,使用系统调用启动它然后检查结果但它似乎是一个真实的矫枉过正。此外,通过这样的策略,测试GUI也会变得更加困难(如果不是不可能的话)。

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

<强>过程:

一种解决方案是使用 Runtime.exec 启动另一个进程,该进程允许您从启动它的进程中监视该进程。这个新进程将在另一个JVM上运行。它等同于fork。

有许多注意事项需要处理在Java中管理另一个进程所需要处理的线程。

本教程应该有所帮助:When Runtime.exec() won't

<强>通信:

有几种方法可以让多个进程相互通信。如果您使用的是Runtime.exec,则可以通过每个程序的输入和输出流进行通信。

这非常慢,更好的解决方案是使用套接字直接在每个进程之间进行通信。