2010-08-23 48 views
0

我需要在完整的端到端测试中测试2个或更多的Java客户端之间的交互。如何测试不同虚拟机上的2个或更多客户端之间的交互?

没有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); }

上面的代码是不是我想要的,因为它使在相同的虚拟机上运行的“应用程序”。

我能够自己思考的解决方案是编写一个假主,实例化secondApps并将其所有输出写入文件,然后用系统调用启动它,然后检查结果,但它似乎是一个真正的矫枉过正。而且有了这样的策略,测试GUI也会更困难(如果不是不可能的话)。

谢谢你的帮助。

回答

0

过程:

一个解决方案是使用的Runtime.exec启动另一个进程,这将允许您监视从中启动它的进程内的过程。这个新进程将在另一个JVM上运行。它相当于叉子。

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

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

通讯:

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

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

相关问题