はい、できます。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 で書かれたテストを認識できるようになります。
http://junit.netbeans.org/junit4/
http://blogs.sun.com/roller/page/xzajo?entry=test_ng_plugin_for_netbeans