正如在不同位置所提到的,maven(3.0.1 版)不支持项目外部的 CLASSPATH。因此,当 jUnitTest 想要启动外部应用程序(如 OpenOffice ie)时,它会在启动命令 '$> mvn test' 时失败。在 Eclipse 中,我可以在“运行配置”中手动添加 CLASSPATH,然后它就可以正常工作了。
我的问题:我可以在我的 jUnitTest 源代码中添加代码来验证我在 Eclipse 中吗?因为这只会跳过命令行上的测试。而其他测试仍在命令行上继续进行。
正如在不同位置所提到的,maven(3.0.1 版)不支持项目外部的 CLASSPATH。因此,当 jUnitTest 想要启动外部应用程序(如 OpenOffice ie)时,它会在启动命令 '$> mvn test' 时失败。在 Eclipse 中,我可以在“运行配置”中手动添加 CLASSPATH,然后它就可以正常工作了。
我的问题:我可以在我的 jUnitTest 源代码中添加代码来验证我在 Eclipse 中吗?因为这只会跳过命令行上的测试。而其他测试仍在命令行上继续进行。
您可以使用Maven 配置文件来激活不同的属性、运行不同的命令、根据需要修改类路径,甚至过滤掉一些测试。例如,您可以创建仅在 Eclipse 中使用的特定配置文件。
编写一个类来验证您要使用的类是否已加载(由于类加载器的工作方式,需要是一个单独的类。它将类似于
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 启动的测试时类路径然后测试将神奇地开始运行
只需添加一个运行时或 VM 标志,您可以在代码中测试其值。