我已经使用Java Extension Mechanism创建了一个用于部署为JDK扩展的模块;我正在使用ANT构建模块。
我有什么方法可以在构建过程中运行我的单元测试(使用TestNG)吗?
问题是该模块有两种类型的测试:
有什么建议吗? 我也可以将构建脚本更改为Gradle,但我认为这不会产生影响。
答案 0 :(得分:0)
您提到的第二类测试是集成测试。这些总是有点难以编写,因为它们需要正确设置应用程序所在的环境。通常,需要三个步骤:
如果要在构建脚本中执行步骤1和3,或者如果要在测试类中对其进行编码,则必须做出决定,具体取决于您的需求。例如,您可能会发现一种方法更清洁,更便携。
在您的情况下,步骤“1 - 安装环境”要求您正确设置java.ext.dirs
环境变量的新Java VM,对于步骤“3 - 清理”,您只需确保分叉的JVM终止。您的构建文件将如下所示:
如果您选择在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 integration或使用JavaExec
task。
在这种情况下,我建议使用您的构建文件来运行测试,但如果您想在Java代码中使用evrything,并从测试类中派生新的JVM,则可以使用ProcessBuilder。除此之外,还需要阅读JAVA_HOME
环境变量。