一般回答
您提到的第二种类型的测试是集成测试。这些总是有点难写,因为它们需要正确设置应用程序所在的环境。通常,需要三个步骤:
- 设置环境(例如运行数据库安装脚本)
- 运行集成测试
- 清理步骤 1 中的所有内容
您必须决定是要在构建脚本中执行步骤 1 和 3,还是要在测试类中对其进行编码,具体取决于您的需求。例如,您可能会发现一种方法更清洁、更便携。
适合您的情况的解决方案
在您的情况下,步骤“1 - 设置环境”要求您使用java.ext.dirs
正确设置环境变量的新 Java VM,并且对于步骤“3 - 清理”,您只需确保分叉的 JVM 终止。您的构建文件将如下所示:
- 编译主代码
- 编译测试代码
- 运行单元测试(你的类型之一)
- 派生新 VM 以运行集成测试。
如果您选择在 Ant 中执行此操作,“运行集成测试”将如下所示:
<target name="extensionIntegrationTest">
<java classname="your.integration.TestClass" fork="true" failonerror="true">
<classpath refid="..." />
<arg value="..." />
<!-- ... more parameters -->
<jvmarg value="-Djava.ext.dirs=path/to/your/extension.jar"/
</java>
</target>
另请查看 Ant Java任务的文档。如果您正在切换到 Gradle(通常是一个非常好的主意),您可以使用 Gradle 的深度Ant 集成或使用JavaExec
task。
在这种情况下,我建议使用您的构建文件来运行测试,但是如果您想在您的 Java 代码中包含所有内容,并从您的测试类中派生一个新的 JVM,您将使用ProcessBuilder。除其他外,这将需要读取JAVA_HOME
环境变量。