2011-11-14 22 views
1

Eclipse Indigoを使用しています。何が起こっているのか分かりませんが、私がAntビルドからテストスイートを呼び出そうとすると、ClassNotFoundExceptionが発生します。ただし、JUnit Testクラスを右クリックしてJunit Testとして実行すると、テストは正常に実行されます。このエラーは、ファイル./test/_ObservableSortUnitTestsが見つからないことを示します。私はファイルへの完全なパスを与えても、同じエラーが発生します。JUnitテストスイートとAntビルド "ClassNotFoundException"

ここ
Buildfile: /home/jason/Dev/ObservableSort/build.xml 
Compile: 
Test: 
    [junit] Testsuite: ./test/_ObservableSortUnitTests 
    [junit] Tests run: 1, Failures: 0, Errors: 1, Time elapsed: 0 sec 
    [junit]  Caused an ERROR 
    [junit] ./test/_ObservableSortUnitTests 
    [junit] java.lang.ClassNotFoundException: ./test/_ObservableSortUnitTests 
    [junit]  at java.lang.Class.forName0(Native Method) 
    [junit]  at java.lang.Class.forName(Class.java:264) 
    [junit]  at org.eclipse.ant.internal.launching.remote.EclipseDefaultExecutor.executeTargets(EclipseDefaultExecutor.java:32) 
    [junit]  at org.eclipse.ant.internal.launching.remote.InternalAntRunner.run(InternalAntRunner.java:424) 
    [junit]  at org.eclipse.ant.internal.launching.remote.InternalAntRunner.main(InternalAntRunner.java:138) 

BUILD FAILED 
/home/jason/Dev/ObservableSort/build.xml:75: Test ./test/_ObservableSortUnitTests failed 

Total time: 1 second 

は私のAntスクリプトです:ここでは

は私のエラーです(免責事項:私はアリに非常に新しいです):

<?xml version="1.0" encoding="UTF-8" standalone="no"?> 
<project default="Build" name="CS 151 Project Build Script" > 
    <!--ANT 1.7 is required --> 
    <property name="home" value="." />     
    <property name="src.dir" value = "${home}/src" /> 
    <property name="dest.dir" value="${home}/Release" /> 
    <property name="dir.build" value="${home}/lib" /> 
    <property name="dir.javadoc" value="${dest.dir}/Javadoc" /> 
    <property name="dir.classes" value="${dest.dir}/Classes" /> 
    <property name="dir.junit.reports" value="${dest.dir}/Reports" /> 
    <property name="test.suite.dir" value="${home}/test" /> 
    <property name="test.suite.class" value ="${test.suite.dir}/_ObservableSortUnitTests" /> 

    <path id="build.class.path"> 
     <fileset dir="${dir.build}"> 
      <include name="*.jar" /> 
     </fileset> 
    </path> 

    <path id="test.class.path"> 
     <pathelement location="${junit.test.suite}" /> 
    </path> 

    <target name="Clean" description="Deletes all old files"> 
     <delete dir="${dir.javadoc}" /> 
     <delete dir="${dir.classes}" /> 
     <delete dir="${dir.junit.reports}" /> 
    </target> 

    <target name="Prepare" description="Creates all necessary directories"> 
     <mkdir dir="${dir.javadoc}" /> 
     <mkdir dir="${dir.classes}" /> 
     <mkdir dir="${dir.junit.reports}" /> 
    </target> 

    <target name="Compile"> 
     <javac srcdir="${src.dir}" destdir="${dir.classes}" includeantruntime="true"> 
      <classpath refid="build.class.path" /> 
     </javac> 
    </target> 

    <target name="Full" description="Executes all build targets"> 
     <antcall target="Clean" /> 
     <antcall target="Prepare" /> 
     <antcall target="Compile" /> 
     <antcall target="Test" /> 
     <antcall target="Build" /> 
     <antcall target="Javadoc" /> 
     <antcall target="run" /> 
    </target> 

    <target name="Build" description="Creates executable jar" depends="Clean, Prepare, Compile"> 
     <jar destfile="${dest.dir}/ObservableSort.jar" filesetmanifest="mergewithoutmain"> 
      <manifest> 
       <attribute name="Main-Class" value="cs151.project1.ObservableSortTest"/> 
       <attribute name="Class-Path" value="."/> 
      </manifest> 
      <fileset dir="${home}/bin"/> 
     </jar> 
    </target> 

    <target name="Run" depends="Compile, Build"> 
     <java jar="${dest.dir}/ObservableSort.jar" fork="true" /> 
    </target>   

    <target name="Run with Unit Tests" depends="Compile, Build, Test"> 
     <java jar="${dest.dir}/ObservableSort.jar" fork="true" /> 
    </target> 

    <target name="Javadoc" description="Generate Javadoc" depends="Compile" > 
     <javadoc access="public" author="true" destdir="${dir.javadoc}" nodeprecated="false" nodeprecatedlist="false" noindex="false" nonavbar="false" notree="false" packagenames="cs151.project1.sorters.insertionsort,cs151.project1.sorters.selectionsort,cs151.project1.Quantifiable,cs151.project1,cs151.project1.sorters.quicksort,cs151.project1.views" source="1.6" sourcepath="${src.dir}" splitindex="false" use="true" version="true"/> 
    </target> 

    <target name="Test" depends="Compile"> 
     <junit> 
      <classpath refid="build.class.path" /> 
      <classpath refid="test.class.path" /> 
      <formatter type="plain" usefile="false" /> 
      <test name="${test.suite.class}" haltonerror="true" /> 
     </junit> 
    </target> 
</project> 
+1

以前の質問のいくつかに[回答](http://meta.stackexchange.com/questions/5234)を受け入れてください。 – oers

答えて

0

愚かな間違い:JUnitのクラスはまだコンパイルされていませんでした。

ソリューション:

  • X
  • ディレクトリにプロジェクトをコンパイルしたディレクトリにJUnitのクラスをコンパイルしY
  • <テスト内のディレクトリのZ

にJUnitのjarを追加します。 >タグで、クラスパスにディレクトリX、Y、Zを追加します。

2

あなたはテストスイートクラスの代わりにパスを使用していますクラスの完全修飾名

ファイルシステムフォルダにJavaクラスがの場合はになりますが、Javaでは、パッケージ名をスラッシュではなく点線で指定する必要があります。

ほとんどの場合、正しいクラス名はtest._ObservableSortUnitTestsまたは多分_ObservableSortUnitTests

+0

私は正しいと思うクラスパスとファイル名のいくつかの異なる順列を試しましたが、それは私に似ていないようです。 – jcampos8782

+0

私はTestSuiteクラスを$ {home}/testに定義しました。これは(デフォルトパッケージ)に含まれています。次に試すべきことの提案? – jcampos8782

+0

あなたのテストが '$ {home}/test'フォルダにある場合は、それをTestターゲットのクラスパスに追加する必要があります。 TestSuiteがデフォルトのパッケージに含まれている場合は、クラス名 '_ ObservableSortUnitTests'のみを指定してください。 –

2

あなたがのJUnitタスクでテストクラスの名前を指定した場合、あなたはマークが言うように、完全にqualifedクラス名を使用する必要があります。 JUnit task

<junit> 
    <test name="my.test.TestCase"/> 
</junit> 

からしかし、あなたはbatchtestを使用している、場合は、ファイル名を指定することができますが、あなたが最後に.javaファイルを追加する必要があります。

<batchtest fork="yes" todir="${reports.tests}"> 
    <fileset dir="${src.tests}"> 
     <include name="**/*Test*.java"/> 
     <exclude name="**/AllTests.java"/> 
    </fileset> 
    </batchtest> 
+0

これはTestSuiteクラスです。 TestSuiteクラスは$ {home}/testで定義されており、それは(デフォルトパッケージ内に)含まれています。私は正しいと思っていて、何もないと思うほど多くの異なる組み合わせを試みました。次に試すべきことの提案? – jcampos8782

関連する問題