【问题标题】:Adding code which verifies that I'm in Eclipse?添加验证我是否在 Eclipse 中的代码?
【发布时间】:2013-01-21 13:41:18
【问题描述】:

正如在不同位置所提到的,maven(3.0.1 版)不支持项目外部的 CLASSPATH。因此,当 jUnitTest 想要启动外部应用程序(例如 OpenOffice)时,它会在启动命令“$> mvn test”时失败。 在 Eclipse 中,我可以在“运行配置”中手动添加 CLASSPATH,然后它就可以正常工作了。

我的问题:我可以在我的 jUnitTest 源代码中添加代码来验证我在 Eclipse 中吗?因为这只会跳过命令行上的测试。虽然其他测试仍在命令行上继续进行。

【问题讨论】:

  • 观察 - 调用 OpenOffice 的单元测试不是单元测试!至少,这听起来像是一个集成测试。
  • 我使用 OpenOffice 的 java API,当我启动 OO 时,我只能测试一个单元格(即)是否由我的程序正确设置。因此对我来说它是单元测试。但是如果你有建议在不启动 OO 的情况下进行单元测试,你可以告诉我。
  • 有太多话要说,不能挤进评论,但我认为你应该把你对 Java API 的使用隐藏在一个外观后面。如果这个外观呈现为一个接口,您可以在单元测试中模拟该对象并确认您对 API 进行了正确的调用,而无需启动 OO。
  • 您不能使用相同的 OpenOffice java API 来检查您执行的操作的结果吗?
  • 示例:我有一个设置或获取单元格颜色的包装类:“public static void setCellColor(XCell cell, int color)”和“public static int getCellColor(XCell cell)”。我可以在不启动 OO 的情况下进行单元测试吗?

标签: java eclipse maven junit openoffice-api


【解决方案1】:

编写一个类来验证您要使用的类是否已加载(由于类加载器的工作方式,需要是一个单独的类。它将类似于

public class OODetector {
  public static boolean isOOOnClassPath() {
    try {
      OODetector.class.getClassLoader().loadClass("org.... class name here ...");
      return true;
    } catch (Throwable t) {
      return false;
    }
  } 
}

现在在任何需要类路径上的类的测试开始时,只需输入Assume.assumeThat(OODetector.isOOOnClassPath(), is(true));,在这种情况下您的测试将被跳过,例如

public class OOTests {
  @Test
  public void smokes() throws Exception {
    Assume.assumeThat(OODetector.isOOOnClassPath(), is(true));
    // rest of test
  }
}

或者更好,把它放在@BeforeClass中,例如

public class OOTests {
  @BeforeClass
  public static void smokes() throws Exception {
    Assume.assumeThat(OODetector.isOOOnClassPath(), is(true));
  }

  // tests
}

如果 OO 不在类路径上,这将跳过类中的所有测试,不影响失败计数,但保持总测试计数有效,并且当您找出正确方法将运行时依赖项获取到 Maven 时-launched test classpath 然后测试会神奇地开始运行

【讨论】:

    【解决方案2】:

    您可以使用Maven profiles 来激活不同的属性、运行不同的命令、根据需要修改您的类路径,甚至过滤掉一些测试。例如,您可以创建一个仅在 Eclipse 中使用的特定配置文件。

    【讨论】:

      【解决方案3】:

      只需添加一个运行时或 VM 标志,您可以在代码中测试其值。

      【讨论】:

        猜你喜欢
        • 2017-03-10
        • 2012-05-28
        • 1970-01-01
        • 2012-12-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多