在单独的 /test 目录中配置 build.xml 到 运行 JUnit 测试

Configure build.xml to run JUnit tests in separate /test directory

我正在尝试创建一个 build.xml 文件以用于 Travis CI。

这是我到目前为止想出的代码:

<?xml version="1.0" encoding="UTF-8"?>
<project name="Practice" basedir="." default="init">
   <property name="src.dir" location="src" />
   <property name="bin.dir" location="bin" />
   <property name="lib.dir" location="lib" />
   <path id="classpath">
      <pathelement location="${bin.dir}" />
      <pathelement location="${lib.dir}/hamcrest-core-1.3.jar" />
      <pathelement location="${lib.dir}/junit-4.11.jar" />
   </path>
   <target name="clean">
      <delete dir="${build.dir}" />
   </target>
   <target name="init" depends="clean">
      <mkdir dir="${bin.dir}" />
      <copy includeemptydirs="false" todir="${bin.dir}">
         <fileset dir="${src.dir}">
            <exclude name="**/*.launch" />
            <exclude name="**/*.java" />
         </fileset>
      </copy>
   </target>
   <target name="compile" depends="init" description="compile">
      <javac srcdir="${src.dir}" destdir="${bin.dir}" classpathref="classpath" />
   </target>
   <target name="test" depends="compile">
      <mkdir dir="${report.dir}" />
      <junit printsummary="yes">
         <classpath>
            <path refid="classpath" />
         </classpath>
         <formatter type="xml" />
         <test name="folder1.MyClass1Test" todir="${report.dir}" haltonfailure="yes" />
      </junit>
   </target>
</project>

如果我将我的 JUnit 测试文件放在与 class 文件相同的目录中,如下所示的文件结构,上面的 build.xml 有效,而 JUnit 测试 运行正确:

- src
  - folder1
    - MyClass1.java
    - MyClass1Test.java

但是,我将测试文件放在单独的 /test 目录中,结构如下所示:

- src
  - folder1
    - MyClass1.java
- test
  - folder1
    - MyClass1Test.java

我似乎无法弄清楚我需要更改什么才能将测试从 /test 文件夹获取到 运行。我尝试更改不同位置的 src.dir 位置以指向 test 而不是 src,但我随后收到错误消息,指出不同的包不存在。

有什么建议吗?

您 can/should/must 定义另一个编译测试源的目标:

<target name="compileTest" depends="compile" description="compileTest">
  <javac srcdir="${test-src.dir}" destdir="${bin.dir}" classpathref="classpath" />
</target>

你的测试目标就变成了

<target name="test" depends="compileTest">
  ...
</target>

确保添加额外的 属性 test-src.dir