我正在使用JUnit,现在我想在运行测试之前执行Java程序(main方法)。
即。在我的项目中,我有一个包含一个主要方法的类的包。我想在运行测试之前运行(可能在一个单独的进程中),因为测试中的类将通过套接字连接到他的进程。
我该怎么做?
最后我想杀死这个过程。
答案 0 :(得分:1)
你几乎已经回答了自己。您需要使用Runtime.exec()(http://docs.oracle.com/javase/7/docs/api/java/lang/Runtime.html)或一些更复杂的工具(如Apache Commons Exec http://commons.apache.org/proper/commons-exec/index.html
)在单独的线程中启动此过程使用'@Before'或'@BeforeClass'注释注释的方法可以是这样做的好地方。最好的方法是将额外的辅助类编程为单例。这个类只负责在以前没有启动的情况下启动线程,因此所有测试只有一个进程。
编辑:应该是这样的:
@BeforeClass
public static void startProess() throws Exception {
SomeProcess .getInstance().startIfNotRunning();
}
public class SomeProcess {
private Thread thread;
private Process process;
private static SomeProcess instance = new SomeProcess ();
public static SomeProcess getInstance() {
return instance;
}
public synchronized void startIfNotRunning() throws Exception {
(...)
// check if it's not running and if not start
(...)
instance.start();
(...)
}
public synchronized void stop() throws Exception {
process.destroy()
}
private synchronized void start() throws Exception {
thread = new Thread(new Runnable() {
@Override
public void run() {
process = Runtime.exec("/path/yo/your/app");
}
});
thread.start();
// put some code to wait until the process has initialized (if it requires some time for initialization.
}
}