24

JUnit4とant1.7の両方に移行しました

テストはEclipseで正常に実行されますが、antを使用してテストを実行する場合、注釈は無視されます。

Ant junitタスクのドキュメントによると:

また、アノテーションのみを使用し、JUnit4TestAdapterを使用しない「純粋な」JUnit4テストを含むJUnit4.0でも動作します。

ただし、ドキュメントでは、構成方法について詳しく説明していません。

junitタスクに必要な特別な設定はありますか?私は何かが足りないのですか?TestCaseを拡張するテスト(つまり3.8スタイル)と「純粋な」Junit 4テストの両方がありますが、それが問題になる可能性がありますか?

4

9 に答える 9

15

Antで純粋なJUnit4テストを使用しています。

これが私のビルドファイルの興味深い部分です:

<junit printsummary="yes" haltonfailure="yes">
    <formatter type="xml"/>
    <classpath refid="path.test"/>
    <batchtest fork="yes" todir="${dir.report.unittests.xml}">
        <fileset dir="src">
            <include name="**/*Test*.java"/>
        </fileset>
    </batchtest>
</junit>

Antのlibディレクトリに最新バージョンのjunit.jarファイルがあることを確認してください。私の知る限り、必要なバージョンはant1.7以降のバージョンで提供されます...

于 2009-03-11T17:13:20.553 に答える
7

Ant には、デフォルトで JUnit 3 のバージョンが同梱されています。JUnit 3 は、テスト アノテーションをサポートしていません。

junit タスクから JUnit 4 アノテーションを使用するには、junit タスクのネストされたクラスパス要素に JUnit 4 jar の場所を指定してください ( ant FAQ のこのエントリを参照してください)。

<junit showoutput="yes" fork="true">
    <classpath>
        <!-- The location of the JUnit version that you want to use -->
        <pathelement location="lib/junit-4.9b1.jar"/>
    </classpath>

    <formatter type="plain" usefile="false" />

    <batchtest>
        <fileset dir="${tests.dir}"/>
    </batchtest>
</junit>

これは、ANT_HOME/lib の ant-junit.jar を上書きするための望ましい解決策です。これは、JUnit jar をコードと一緒にソース管理に保持して、新しいバージョンへのアップグレードを簡単に行うことができることを意味するためです。

上記のファイルセットにインクルード パターンを指定していませんが、これは、junit タスクがそのディレクトリ構造内のすべてのクラスに対して JUnit を実行しようとすることを意味することに注意してください。ソース ファイルをどのように構成したかによって、任意のテストが実行されます。

于 2012-03-22T15:48:53.263 に答える
2

これは私に起こりました。それは、注釈を使用し、TestCase を拡張していたためです。

public class TestXXX extends TestCase {

    @Test
    public void testSimpleValidCase() {
        // this was running
    }

    @Test
    public void simpleValidCase() {
        // this wasn't running
    }
}

TestCase を拡張すると、JUnit3 スタイルが想定されるため、JUnit4 アノテーションは無視されます。

解決策は、TestCase の拡張を停止することです。

于 2012-03-21T12:08:41.480 に答える
1

クラスパスの定義を確認してください...これで問題が解決しました。

<path id="classpath" description="Classpath do Projeto">
    <fileset dir="${LIB}">
        <include name="**/*.jar" />
        <exclude name="**/.SVN/*.*"/>
    </fileset>
</path>
于 2012-02-27T22:31:53.187 に答える
0

これは私の一般的なantスクリプトの関連部分です...それがあなたを助けるかどうかはわかりません。

 <junit fork="true"
        forkmode="once"
        haltonfailure="false"
        haltonerror="false"
        failureproperty="tests.failures"
        errorproperty="tests.errors"
        includeantruntime="true"
        showoutput="true"
        printsummary="true">
     <classpath>
         <path refid="path-id.test.classpath.run"/>
     </classpath>

     <formatter type="xml"/>

     <batchtest fork="yes"
                todir="${dir.build.testresults}">
         <fileset dir="${dir.src.tests}">
             <include name="**/*Test.java"/>
         </fileset>
     </batchtest>
 </junit>
于 2009-03-11T17:15:25.417 に答える
0

また、JUnit4TestAdapter を使用せずに JUnit 4.0 でテストを実行しようとしました。つまり、メソッド
public static junit.framework.Test suite() { return new JUnit4TestAdapter(SomeTestClass.class); }

私はant 1.9.4を使用しています。ant test verbose (ant -v) を実行すると表示される

[junit] 同じ VM で複数のテストを実行する
[junit] /usr/share/java/junit.jar:/usr/sharejava/ant-launcher.jar:/usr/share/java/ant.jar:/usr を暗黙的に追加する/share/java/ant/ant-junit.jar を CLASSPATH に

あはは、まだいくつかの ant-junit-task があります。これをダウンロードすると、暗黙的に追加されていない /usr/share/java/ant/ant-junit4.jar がさらに表示されます。明示的に追加しました:

<junit printsummary="yes" 
    fork="yes" 
    forkmode="once"
    maxmemory="1023m" 
    showoutput="no">
    ...
   <classpath>
     <pathelement path="...:${junitJar}:${hamcrestJar}:/usr/share/java/ant/ant-junit4.jar" />
   </classpath>
...
</junit>

そしてそれはうまくいきました。なし:いいえ。この解決策がまったく美しくないことは承知しています...

于 2016-04-28T22:57:13.913 に答える
0

このアノテーションを他のクラス org.junit.Ignore に適用します

于 2010-12-13T09:45:47.467 に答える
-1

私が最終的に行ったことは、タスクで使用される定義の 1 つに Ant を追加することでした。出来上がり。

于 2009-09-01T22:58:14.907 に答える