单元测试只有在运行Ant任务时才会失败



我从eclipse和Ant任务中运行相同的测试。从eclipse运行时,所有测试都通过。当我运行Ant junit任务时,有一个测试失败,出现以下奇怪的错误:

junit.framework.AssertionFailedError在org.eclipse.ant.internal.launching.remote.EclipseDefaultExecutor.executeTargets (EclipseDefaultExecutor.java: 32)org.eclipse.ant.internal.launching.remote.InternalAntRunner.run (InternalAntRunner.java: 423)org.eclipse.ant.internal.launching.remote.InternalAntRunner.main (InternalAntRunner.java: 137)在unitests.mypackage.MyTestClass。myTestCase(未知源)

原因是什么?

我读了一点,发现这可能是因为eclipse和Ant使用不同版本的junit。在我的项目中,junit位于libs/junit-4.10.jar,并在eclipse的.classpath文件和junit任务类路径中被引用。您可以在这里看到Ant的任务:

<path id="classpath">
    <fileset dir="${lib.dir}" includes="**/*.jar"/>
    <fileset dir="${src.dir}" includes="**/*.jar"/>
</path>
...
<target name="run-unit-tests" depends="compile,compile-unit-tests">
    <mkdir dir="${junit.output.dir}"/>
    <junit fork="yes" printsummary="yes" haltonfailure="no">          
        <classpath>
            <path refid="classpath"/>
            <fileset dir="${unit.tests.classes.dir}" includes="**/*.class"/>
        </classpath>
        <formatter type="xml"/>
        <batchtest todir="${junit.output.dir}">
            <fileset dir="${unit.tests.dir}">
                <include name="**/*Test*.java"/>
            </fileset>
        </batchtest>
    </junit>
    <mkdir dir="${junit.report.dir}"/>
    <junitreport todir="${junit.report.dir}">
      <fileset dir="${junit.output.dir}">
        <include name="TEST-*.xml"/>
      </fileset>
      <report format="frames" todir="${junit.report.dir}/html"/>
    </junitreport>
</target>

Ant的版本是1.7.1,它随eclipse一起发布。

编辑:

最终通过将fork="yes"添加到junit的任务中解决了这个问题。通过使用eclipse的导出选项生成构建文件,然后查看生成的文件与我的文件之间的差异,可以找到它。我不知道为什么分叉可以解决这个问题。

不同版本的Ant听起来像是一个可能的原因。要对此进行测试,请设置希望Eclipse使用哪个Ant版本。

设置用于在IDE外运行测试的相同版本的JUnit和相同的JDK可能也是一个好主意。

由于堆栈跟踪显示了org.eclipse条目,我强烈怀疑您正在通过Eclipse运行ant。如果您从控制台中运行ant,则很可能不会遇到此问题。

因此,原因是Eclipse中的一个bug。这并不奇怪,Eclipse充满了bug。

fork="true"有帮助,因为它导致ant生成一个新进程来执行。这个新进程的类路径中没有任何Eclipse类。

相关内容

  • 没有找到相关文章

最新更新