Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/341.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何将junit测试分发到另一台机器_Java_Ant_Junit_Distributed - Fatal编程技术网

Java 如何将junit测试分发到另一台机器

Java 如何将junit测试分发到另一台机器,java,ant,junit,distributed,Java,Ant,Junit,Distributed,我们现在拥有的build.xml有许多编译和运行单元测试的目标。build.xml引用了许多与自身相关的属性文件。当在同一台机器上进行构建和测试时,所有这些都可以正常工作 将所有JAR和任何测试输入文件保存到build_home(另一台机器)非常简单。如何在新位置上运行junit?我应该创建小型build.xml文件来运行测试吗?(无法动态创建ant build.xml)有解决方案吗 (GridGain是可能的解决方案。尚未尝试。) 编辑:模式详细说明了为什么这更复杂:源代码大约是3G,执行cl

我们现在拥有的build.xml有许多编译和运行单元测试的目标。build.xml引用了许多与自身相关的属性文件。当在同一台机器上进行构建和测试时,所有这些都可以正常工作

将所有JAR和任何测试输入文件保存到build_home(另一台机器)非常简单。如何在新位置上运行junit?我应该创建小型build.xml文件来运行测试吗?(无法动态创建ant build.xml)有解决方案吗

(GridGain是可能的解决方案。尚未尝试。)


编辑:模式详细说明了为什么这更复杂:源代码大约是3G,执行clearcase更新和构建需要相当长的时间(40分钟),而junit测试的实际测试时间为60分钟。我们有很多机器来运行测试——在所有系统上加载Clearcase是不可能的

试试巡航控制。这是一种将构建和单元测试转移到另一台机器上的好方法。

我理解您的问题,因为您只想在另一台机器上运行Junit测试,而不实际构建它?您可以在下面的行中运行一些东西,作为来自巡航控制系统(Cruise control)和哈德逊(Hudson)的构建脚本

如果您通过ant使用任务,那么遵循与标准构建相同的原则。您可以从源代码管理中将代码签出到所有目标计算机

将所有根目录外部化为build.properties。这些属性必须像这样在每台机器上设置

#Overall Project Name
project.name=myapp

# Top Level Root directory of the new working project
toplevel.project.dir=D:/proj/eComm

# Root directory of the source code
root.project.dir=D:/proj/eComm/Construction

# JDK home directory 
jdk.home=C:/jdk1.5.0_11
build.properties还将定义一些与上述内容相关的静态属性。任何本地计算机上的任何用户都不需要更改这些设置

ear.dist.dir = ${root.project.dir}/target
src.dir     = ${root.project.dir}/src
test.src.dir = ${root.project.dir}/test
确保build.xml仅通过这些属性引用任何其他子目录,其中不包含任何硬编码值

我的junit位于一个单独的文件中,该文件由

<import file="${root.project.dir.buildscripts.dir}/junit.xml"/>

junit.xml的某些部分如下所示

<target name="run.junit" depends="clean.junit, junit.info, prepare.junit"
    description="Compiles and runs all JUnit Tests in the 'test' directory and produces a report of all failures">

<junit printsummary="yes" fork="true" haltonfailure="no" showoutput="yes" maxmemory="512m">
      <jvmarg line="${junit.jvm.arg}"/>
      <classpath>
        <fileset dir="${src.dir}">
          <include name="**/*.*"/>
        </fileset>
        <fileset dir="${ear.dist.dir}/build/classes">
          <include name="**/*.*"/>
        </fileset>
         <pathelement path="${test.run.path}"/>
      </classpath>
      <formatter type="xml"/>
      <batchtest fork="true" todir="${ear.dist.dir}/build/junit">
      <fileset dir="${test.src.dir}" includes="${test.pattern.include}"/>
      </batchtest>
    </junit>

</target>


谢谢。巡航控制系统如何运行测试?我们使用哈德逊,所以我可以使用类似的技术。哈德逊也同样有效。为什么不将其配置为作为构建的一部分运行测试呢?我们就是这么做的。它很好用。不同之处在于在hudson上构建,在另一个平台上运行测试。我现在看到的方法是让junit在另一个ant文件中运行代码,比如junit.xml,并与“jars”和“testdata”一起复制。使用junit.xml(来自JoseK)运行测试您几乎说过,如果build.xml中没有更改,我想要的是不可能的。接受答案,因为它对如何构造构建文件有足够的解释。谢谢