我需要在完整的端到端测试中测试两个或更多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也会变得更加困难(如果不是不可能的话)。
感谢您的帮助。
答案 0 :(得分:0)
<强>过程:强>
一种解决方案是使用 Runtime.exec 启动另一个进程,该进程允许您从启动它的进程中监视该进程。这个新进程将在另一个JVM上运行。它等同于fork。
有许多注意事项需要处理在Java中管理另一个进程所需要处理的线程。
本教程应该有所帮助:When Runtime.exec() won't
<强>通信:强>
有几种方法可以让多个进程相互通信。如果您使用的是Runtime.exec,则可以通过每个程序的输入和输出流进行通信。
这非常慢,更好的解决方案是使用套接字直接在每个进程之间进行通信。