我有一个服务器客户端项目,出于测试目的,我想在一个全新的过程中启动服务器。问题是,我在项目中只有一个main()方法,没有jar。所以我的猜测就像是
Runtime.getRuntime().exec("javac MyServer.java");
Runtime.getRuntime().exec("java class MyServer");
但我真的不确定它,而且我也不完全喜欢为每个测试用例启动javac的需要。
我该怎么办?
修改
我想在@Before
方法中启动该过程并在@After
中将其销毁。它必须自动运行,因此不能手动打开服务器。我正在寻找的是一种消除服务器类编译的方法。但现在我猜没有别的办法了。
答案 0 :(得分:2)
如果这是出于测试目的,只需从命令行启动其他进程或使用Eclipse来处理它。在Eclipse中,同一个项目可以有多个main()入口点。当您希望运行应用程序时,您可以创建一个运行/调试配置,该配置说明您要调用的入口点。因此,您可以为客户端定义一个,为服务器定义一个,然后单击按钮运行它们。
展开:
先决条件 - 在执行任何此操作之前,首先将项目导入Eclipse。
Eclipse还有一个调试透视图,您可以在其中停止/暂停正在运行的进程,设置断点等等。它甚至可以同时调试多个内容,因此您可以在调试中启动客户端和服务器,并在调用的任一侧设置断点。
答案 1 :(得分:1)
Java允许您进行类似的系统调用。
Runtime r = Runtime.getRuntime();
Process p = r.exec("java otherMain arg0 arg1");
这将允许您启动另一个java进程。如果需要,Process还有一些方法可以获得该进程的输出。
答案 2 :(得分:0)
看看JUnit,我认为您想要做的是在服务器运行的情况下针对您的客户端运行一系列测试。您可以通过编写JUnit测试来完成此操作,该测试使用@Before注释在每次测试之前运行设置方法。例如:
import org.junit.Before
public class TestClient {
private static final int port = 20000 + new Random().nextInt(10000);
private MyServer server;
@Before
public void setup() {
// setup server
server = new MyServer(port);
server.start();
}
@Test
public void testX() {
// test x
}
@Test
public void testY() {
// test y
}
}