2011-12-10 19 views
1

EclipseとAntタスクの両方から同じテストを実行します。 eclipseから実行すると、すべてのテストが合格します。私はAntのJUnitのタスク、1を実行すると、単一のテストは、次の奇妙なエラーで失敗します。ユニットテストは、Antタスクから実行する場合にのみ失敗します

junit.framework.AssertionFailedError at org.eclipse.ant.internal.launching.remote.EclipseDefaultExecutor.executeTargets(EclipseDefaultExecutor.java:32) at org.eclipse.ant.internal.launching.remote.InternalAntRunner.run(InternalAntRunner.java:423) at org.eclipse.ant.internal.launching.remote.InternalAntRunner.main(InternalAntRunner.java:137) at unitests.mypackage.MyTestClass.myTestCase(Unknown Source)

原因となることができますか?

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であり、日食となりました。

編集:

は、最終的にJUnitののタスクに「fork="yesを追加することによってそれを解決し、Eclipseのエクスポートオプションを使用してファイルを構築生成し、その後、生成されたファイルと私の間の違いを見て、それが見つかりませアイデア理由。フォークはしかし、問題を解決します。可能性の高い原因のようなAntの音の

答えて

2

スタックトレースはorg.eclipseのエントリを示しているので、私はあなたがEclipse経由でantを実行していることを強く疑っています。コンソールからantを実行すると、この問題は起こりそうにないでしょう。

したがって、原因はEclipseのバグです。これは驚くべきことではありません.Eclipseにはバグがたくさんあります。

fork="true"は、antに新しいプロセスを実行させるために役立ちます。この新しいプロセスには、クラスパス上にEclipseクラスがありません。

3

異なるバージョンを。それをテストするには、set which Ant versionあなたはEclipseが使用したい。

それは同じバージョンを設定することも、おそらく良いアイデアですIDEの外でテストを実行するために使用するJUnitとsame JDKがあります。

+0

わかりません。スタンドアロンのAntをインストールして代わりに使用することをお勧めしますか? – Artium

+0

私はすでにビルドをコマンドラインから実行しており、クラスパス上のAnt jarファイルを参照していると仮定します(スタンドアロンAntの意味を理解できません)。 JUnitのバージョンが同じであることを確信しているので、Eclipseがクラスパス参照と同じバージョンのAntを使用していることを確認したいと思います。上記のリンクは、EclipseのAnt環境設定を示しています。問題がJUnitバージョンであると主張している同様のエラーを参照している投稿を見つけましたので、おそらく両方とも同じJUnitを使用していることを確認する価値があります:http://www.coderanch.com/t/96244/Testing/junit-exception –

関連する問題