ant多个目标执行

时间:2013-10-29 18:17:45

标签: ant junit

我的目标很少,我需要执行。我创建了一个目标,命名所有这些,但我认为这不是这样做的方法吗?以下是调用所有其他目标的目标运行:

<target name="test.all" depends="build
echolaunching agent /echo
antcall target="RunJtfTests" /
antcall target="launchOpenAgent" /
antcall target="run.test" //target
target name="run.test" depends="build, launchOpenAgent, runJtfTests"
echo Launching test/echo
echo message="${toString:iControlSilk4J.classpath}" /
  <java classname="com.miranda.icontrol.silk4j.installation.AdministrationCtrl"
classpath><fileset dir="${lib.dir}"
include name="**/*.jar" />
/fileset
pathelement path="${iControlSilk4J.classpath}" /
pathelement location="${jarPath}/Admin.jar" /
/classpath
  </java>
</target>

它没有运行,我这样做是为了得到报告而我什么都没得到?怎么了 ?从我读到的,antcall就像一个不好的goto循环。我想改为考试。

- &GT;以下是我想要执行的所有测试:

  • 初始化
  • 清洁
  • AdministrationCtrl.Rollback
  • AdministrationCtrl.LatestInstallation
  • AdministrationCtrl.BackupiControl,
  • AdministrationCtrl.ChangeService
  • AdministrationCtrl.DefaultSetting
  • AdministrationCtrl.InitFailOver
  • AdministrationCtrl.RunDensite2Service
  • AdministrationCtrl.RunDensiteService
  • AdministrationCtrl.RunGSMService
  • AdministrationCtrl.RunLoudnessAnalyzerService
  • AdministrationCtrl.RunLoudnessLoggerService
  • AdministrationCtrl.RunRouterManagerService
  • AdministrationCtrl.RunttyR0Service
  • AdministrationCtrl.RunVirtualService
  • AdministrationCtrl.RestoreBkp

但这可能更通用(关于我将在Silk4J中添加的测试)。有没有办法更通用?

1 个答案:

答案 0 :(得分:5)

在我之后重复:

  

Ant不是一种编程语言。它是一种依赖矩阵语言。

这是一个重要的区别。你不告诉Ant要执行什么。你告诉Ant你需要什么,Ant会知道该怎么做。

我可以告诉你,在使用所有这些<antcall/>来理解Ant时遇到了问题。这是禁忌,因为它可以让你不止一次执行任务。您的构建文件也毫无意义。

使用目标的dependency参数。例如,这是一个骨架build.xml文件:

<project>
    <target name="clean"/>

    <target name="prepare"/>

    <target name="compile"
        depends="prepare"/>

    <target name="package"
         depends="compile"/>

    <target name="test-compile
         depends="compile"/>

    <target name="test"
         depends="test-compile"/>

    <target name="deploy"
         depends="package"/>

    <target name="post-test-results"
         depends="test"/>

    <target name="all"
         depends="clean,post-test-results,deploy"/>
</project>

当我想运行目标all时,我主要是指我想做一个干净的构建,发布我的测试结果,然后部署构建。 Makefiles也是如此。我没有列出我的所有任务。我为什么要关心我的编写准备工作?这不是我的担忧。

所以我打电话给all,然后拨打cleanpost-test-resultsdeploy。除了称这三个目标之外,我不知道Ant会做什么。

等等......发布测试结果需要做什么?好吧,我可能需要运行我的测试。因此,我对test目标的post-test-results依赖。但是,为了运行我的测试,我可能需要编译它们。因此,test-compile目标上的test存在依赖关系。

为了编译我的测试,我依赖于常规Java代码。因此,test-compile将取决于compile。为了编译,我必须做好准备。也许这是建立必要的结构,或下载所需的罐子。那是在compile之前调用的。现在,我可以部署。但是,在我可以部署之前,我需要打包我的部署。因此,deploy取决于package

包本身取决于compile,但我的compile-test也是如此。由于我已经调用了compile,因此我的package目标不必这样做。它所要做的就是打包已编译的类文件。

因此,我可能会按此顺序执行以下目标:

  • 清洁
  • 制备
  • 编译
  • 测试编译
  • 后验结果
  • 部署

我的all目标确实击中了我的所有其他目标,但我没有必要将它们全部列为依赖项,或强制它们通过<antcall/>进行构建。

看起来您需要了解Ant及其工作原理。您的示例Ant文件无效。 Ant使用XML样式结构。所有任务都是XML样式实体。

幸运的是,Ant上有很多好书。我建议Manning的Ant in Action作为一个很好的起点。

您将发现的一件事是您可以在单个<junit>任务中指定批量的junit测试。这可以通过<batchtest>任务上的一个或多个<junit>子实体来完成。 <batchtest>将运行符合特定条件的所有分类。您还可以在<test>任务中使用<junit>子实体。 <test>子实体允许您指定要运行的单个类文件。很多时候,这些类文件可能只是调用一组指定的其他Junit分类。这样,开发人员可以指定要运行的测试和要跳过的测试。

您可以通过使用属性控制要运行或未运行的测试,而不是通过创建许多测试任务来控制。这允许您指定测试集,而不必生成多个JUnit进程。