为什么ant不能正确运行我的单元测试?

时间:2012-05-27 19:13:05

标签: ant junit

我正在试图弄清楚如何使用ant设置项目。出于某种原因,我无法运行junit测试。我使用ant设置了一个简单的虚拟项目来尝试解决这个问题。它所拥有的只是一个单独的单元测试,应该通过。

我的项目结构如下所示。

.
|-- build.xml
|-- src
`-- test
    |-- foo
    |   `-- MainTest.java
    `-- junit-4.10.jar

MainTest.java看起来像这样。

package foo;

import org.junit.*;
import static org.junit.Assert.*;

public class MainTest {
    @Test
    public void passes() {
        System.out.println("It works!");
    }
}

这是build.xml。

<project name="Nes" default="build" basedir=".">
    <target name="build-test">
        <javac srcdir="test">
            <classpath>
                <pathelement location="test/junit-4.10.jar" />
            </classpath>
        </javac>
    </target>

    <target name="test" depends="build-test">
        <junit>
            <classpath>
                <pathelement location="test/junit-4.10.jar" />
            </classpath>
            <batchtest>
                <fileset dir="test" includes="foo/MainTest.class" />
            </batchtest>
        </junit>
    </target>
</project>

这是我从运行ant test获得的输出。

Buildfile: /home/hayden/dev/nes/build.xml

build-test:
    [javac] /home/hayden/dev/nes/build.xml:4: warning: 'includeantruntime' was not set, defaulting to build.sysclasspath=last; set to false for repeatable builds

test:
    [junit] Test foo.MainTest FAILED

BUILD SUCCESSFUL
Total time: 0 seconds

我正在运行ant 1.8.2和Java 6.

我做错了什么?

1 个答案:

答案 0 :(得分:0)

您需要添加实际.class文件的路径,以便JUnit可以实际运行测试。由于您完全符合测试类名称,因此需要包含包含foo包的目录:

<target name="test" depends="build-test">
    <junit>
        <classpath>
            <pathelement location="test/junit-4.10.jar" />
            <pathelement location="test" />
        </classpath>

但我建议您将javac任务更改为不将构建工件(即.class文件)输出到与源文件相同的目录中。创建一个顶级的“构建”目录,并将所有构建输出放在那里。

您还应该通过向includeantruntime任务添加javac属性来安静第一个警告:

    <javac srcdir="test" includeantruntime="false">