如何在每次JUnit测试执行之前自动执行脚本?

时间:2014-07-30 09:01:45

标签: eclipse junit environment-variables

我的团队正在使用JUnit从eclipse启动测试。

在从eclipse执行这些测试之前,我们必须指定env变量LD_LIBRARY_PATH以在运行时加载依赖项。 当我的团队成员之一在项目中进行更改时,LD_LIBRARY_PATH的正确值可能会更改。我们有一个计算其正确值的脚本。

今天,我们有两个解决方案来设置变量:

  • 运行脚本以获取值,并且对于我们要运行的每个JUnit测试,在“运行配置”窗口中进行设置。
  • 编写一个脚本来设置变量并启动eclipse。

第一种方法是非生产性的,使用第二种方法,我们每次更新项目时都必须重新启动eclipse。

更好的解决方案是编写一个脚本来设置变量,每次运行测试时都会被eclipse调用。

有没有办法在每次使用Eclipse测试之前调用脚本? 任何其他想法也将不胜感激。

1 个答案:

答案 0 :(得分:2)

遵循SO queston How to run Unix shell script from Java code?的想法,您可以在每个测试或每个测试类之前执行脚本,如下所示

@Before // could also be @BeforeClass
public void setupEnvViaScript() throws IOException, InterruptedException {
  ProcessBuilder processBuilder = new ProcessBuilder("my-script.cmd", "arg-1", "arg-2");
  processBuilder.environment().put("JAVA_HOME", "value");
  processBuilder.environment().put("ENV_VAR", "value");

  processBuilder.directory(new File("d:/working/path/script/shall/be/executed/in"));
  Process process = processBuilder.start();

  int exitValue = process.waitFor();
  if (exitValue != 0) {
    // check for errors
    new BufferedInputStream(process.getErrorStream());
    throw new RuntimeException("execution of script failed!");
  }
}

这有一些警告

  • 这种方式是平台依赖
  • 脚本及其路径是硬编码的
  • 工作目录是硬编码的

您可以通过多种方式解决此问题,例如

  • 在执行前动态生成脚本文件
  • 选择依赖于某些约束的执行路径