FaqJUnit4Ja

プロジェクトで JUnit 4 でテストを実行できますか?

はい、できます。IDE は JUnit 3.8.2 をバンドルしていますが直接 JUnit 4 はサポートしていません。しかし設定をすることで使えるようになり、JUnit 結果ウィンドウ以外は使えるようになります。

まず最初に以下をダウンロードしてください。

http://prdownloads.sourceforge.net/junit/junit4.1.zip

ディスクのどこかに解凍します。この例では /opt/junit4.1 に解凍したとします。

ツール|ライブラリマネージャー に行き 新規ライブラリ を選択します。junit4 と名前をつけ、以下のように設定します:

クラスパス: /opt/junit4.1/junit-4.1.jar
ソース:   /opt/junit4.1/junit-4.1-src.jar
Javadoc:   /opt/junit4.1/javadoc

これでこのライブラリをプロジェクトで使えるようになります。例えば Anagram Game を作成し、これを JUnit4 で使えるようにしてみます。

最初に ファイル タブから nbproject/project.properties を開きここで、

javac.test.classpath=${javac.classpath}:${build.classes.dir}:${libs.junit.classpath}

を次のように単純に変更します。

javac.test.classpath=${javac.classpath}:${build.classes.dir}:${libs.junit4.classpath}

プロジェクト タブの テストライブラリ では変更が有効になります。JUnit4 は JUnit3 と後方互換がありますのでどのプロジェクトでも使用することができます。変更なしでも以前のスタイルで実行できます。

次に新しい書式で使えるようにプロジェクトをアップグレードしてみます。WordLibraryTest.java を開き次のように変更します。(変更箇所はマークされています):

package com.toy.anagrams.lib;
import java.util.Arrays;
import static org.junit.Assert.*; // ADDED
import org.junit.Test;            // EDITED
public class WordLibraryTest {
    @Test()                       // ADDED
    public void isCorrect() {     // EDITED
        for (int i = 0; i < WordLibrary.getSize(); i++) {
            String clearWord = WordLibrary.getWord(i);
            String scrambledWord = WordLibrary.getScrambledWord(i);
            assertTrue("Scrambled word \"" + scrambledWord +
                       "\" at index: " + i +
                       " does not represent the word \"" + clearWord + "\"",
                       isAnagram(clearWord, scrambledWord));
        }
    }
    private boolean isAnagram(String clearWord, String scrambledWord) {
        char[] clearArray = clearWord.toCharArray();
        char[] scrambledArray = scrambledWord.toCharArray();
        Arrays.sort(clearArray);
        Arrays.sort(scrambledArray);
        return Arrays.equals(clearArray, scrambledArray);
    }
}

注釈(アノテーション)と静的インポートを使うのでプロジェクトの プロパティ ダイアログを開き ソース カテゴリの ソースレベル1.5 にします。

新しいテストはコンパイルできるようになります。IDE ではコード補完などが有効になります。しかし実行はまだできません。IDE のテストが実行する環境(Ant 1.6.5) は JUnit4 をまだ理解できないからです。

これを解決するには(JUnit 結果ウィンドウ以外) build.xml を開いて以下を追加します:

    <target name="-init-macrodef-junit">
        <macrodef name="junit" uri="http://www.netbeans.org/ns/j2se-project/3">
            <attribute name="includes" default="**/*Test.java"/>
            <sequential>
                <property name="test.src.dir.absolute" location="${test.src.dir}"/>
                <pathconvert property="classes" pathsep=" " dirsep=".">
                    <path>
                        <fileset dir="${test.src.dir.absolute}" includes="@{includes}"/>
                    </path>
                    <mapper type="glob" from="${test.src.dir.absolute}${file.separator}*.java" to="*"/>
                </pathconvert>
                <java classname="org.junit.runner.JUnitCore" fork="true"
                               dir="${basedir}" failonerror="false" resultproperty="junit.result">
                    <arg line="${classes}"/>
                    <classpath>
                        <path path="${run.test.classpath}"/>
                    </classpath>
                    <syspropertyset>
                        <propertyref prefix="test-sys-prop."/>
                        <mapper type="glob" from="test-sys-prop.*" to="*"/>
                    </syspropertyset>
                    <jvmarg line="${run.jvmargs}"/>
                </java>
                <condition property="tests.failed">
                    <not>
                        <equals arg1="${junit.result}" arg2="0"/>
                    </not>
                </condition>
            </sequential>
        </macrodef>
    </target>
    <target name="-debug-start-debuggee-test" if="have.tests"
                     depends="init,compile-test" xmlns:j2seproject3="http://www.netbeans.org/ns/j2se-project/3">
        <fail unless="test.class">Must select one file in the IDE or set test.class</fail>
        <j2seproject3:debug classname="org.junit.runner.JUnitCore" classpath="${debug.test.classpath}">
            <customize>
                <arg line="${test.class}"/>
            </customize>
        </j2seproject3:debug>
    </target>

これで テストプロジェクト を使えるようになります。ファイルを実行 や他のテスト ファイルをデバッグ などがテストで有効になります。(またはテストするクラスで __ファイルのテストをデバッグ)

JUnit 結果ウィンドウ を使うには他のトリックがあります。suite メソッドをそれぞれのクラスに追加し JUnit3.8 のブリッジを提供することです。以下を追加します:

public static junit.framework.Test suite() {
    return new JUnit4TestAdapter(WordLibraryTest.class);
}

そして既存の NetBeans 5.0 JUnit 統合は JUnit4 で書かれたテストを認識できるようになります。


バージョン: NetBeans 5.0


Apache Ant 1.7 のサポートは JUnit 4.x に必要です。JUnit4.x の直接サポートも今後の Netbeans のリリースに含まれる予定です:

http://junit.netbeans.org/junit4/


TestNG サポートをお探しですか? TestNG は JUnit4.x と同様の Java 用の他のユニットテストフレームワークです。以下を参照してください:

http://blogs.sun.com/roller/page/xzajo?entry=test_ng_plugin_for_netbeans


TestNG や他のテスト用の他のアプローチ: "NetBeans and Alternative Test Runners: Customizing Standard Java Projects" (abstract、またはarticle) を参照してください。JUnit4 のアプローチのように、NetBeans コマンド(デバッグ、実行、テスト)をカスタマイズしています。実験用のプラグインではなく、これらは別の区画やコマンドを必要としません。その記事はどのように動作するのか説明しているので test runner を動作を再構築することができます。TestNG や SuiteRunner の例を実行するにはインポートセクションを参照してください。そこでは1行の追加でファイルをビルドできるようになります。


Not logged in. Log in, Register

By use of this website, you agree to the NetBeans Policies and Terms of Use. © 2012, Oracle Corporation and/or its affiliates. Sponsored by Oracle logo