首页 > 解决方案 > 在 ant 中执行 Junit 测试 - noclassdeffounderror 名称错误

问题描述

我正在尝试用 ant 执行一些 junit 测试套装。

这是我的文件夹结构

首先,我编译源位置中的所有文件,然后编译测试文件夹中的 java 文件。

测试文件夹的整个结构(编译的 .class 文件)保存在 bin 文件夹中,里面看起来像这样。

bin-test-alltests | -suites - SetupSuite.class - StartSuite.class

allTests文件夹中是在套件文件夹中的套件中使用的测试

我正在尝试启动这些套件,但我经常遇到错误:

ant junit java.lang.noclassdeffounderror 名称错误

我很确定类路径有问题,但我不知道是什么。我试图改变

<test name="SetupSuite"/>

<test name="SetupSuite.class"/>

我得到另一个错误:

java.lang.ClassNotFoundException:SetupSuite.class

这是我的 build.xml 文件

<project name="MyTest" basedir=".">

    <!--Common properties -->
    <property name="src.dirname" value="src" />
    <property name="test.dirname" value="test" />
    <property name="lib.dirname" value="lib" />
    <property name="bin.dirname" value="bin" />
    <property name="src.encoding" value="utf8" />
    <property name="src.version" value="1.7" />
    <property environment="env" />

    <!-- Paths for MyTest -->
    <property name="MyTest.dir" value="${basedir}" />
    <property name="MyTest.src.dir" value="${MyTest.dir}\${src.dirname}" />
    <property name="MyTest.test.dir" value="${MyTest.dir}\${test.dirname}" />
    <property name="MyTest.dest.dir" value="${MyTest.dir}\${bin.dirname}" />
    <property name="MyTest.lib.dir" value="${MyTest.dir}\${lib.dirname}" />

    <path id="classpath">
        <pathelement location="${MyTest.lib.dir}\junit.jar" />
        <pathelement location="${MyTest.test.dir}\test\suites\" />
    </path>

    <target name="compile-MyTest-src" >
        <myjavac srcdir="${MyTest.src.dir}" destdir="${MyTest.dest.dir}" classpath="{MyTest.lib.dir}\junit.jar"/>
    </target>

    <target name="compile-MyTest-test" depends="compile-MyTest-src">
        <path id='libs'>
            <fileset dir= "${MyTest.lib.dir}\" includes="**/*.jar"/>
        </path>
    <myjavac srcdir="${MyTest.test.dir}\" destdir="${MyTest.dest.dir}" classpathref = 'libs'/>
    </target>

    <target name="execute-tests" depends="compile-MyTest-src,compile-MyTest-test">
        <junit printsummary="yes" haltonfailure="no" showoutput="yes">
        <formatter type = "brief" usefile = "false" />
        <classpath refid="classpath" />
            <test name="SetupSuite"/>
        </junit>
    </target>   

   <!-- General compiler settings -->
    <presetdef name="myjavac">
        <javac classpathref="classpath" debug="on" includeantruntime="false" encoding="${src.encoding}" source="${src.version}" target="${src.version}" />
    </presetdef>

</project>

标签: junitantjavacbuild.xml

解决方案


您需要将测试名称设置为 SetupSuite 的全名:

<test name="alltests.suites.SetupSuite"/>

推荐阅读