0

我需要在完整的端到端测试中测试 2 个或更多 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); }

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

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

谢谢您的帮助。

4

1 回答 1

0

过程:

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

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

本教程应该有所帮助:当 Runtime.exec() 不会

沟通:

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

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

于 2010-08-23T21:17:10.943 回答