08 Nov 2014, 06:26

コマンドラインから JUnit を使う方法

最近, Eclipse が嫌いになってしまったので, コマンドラインから JUnit を利用する方法を調べてみた.

Environment

  • ArchLinux
  • JUnit 4.11

事前準備

JUnit をダウンロード.

適当なフォルダに junit.jar を配置したあとに, CLASSPATH を通す.

[sourcecode language=”bash” title=””]
export JUNIT_HOME = /usr/share/java
export CLASSPATH = $JUNIT_HOME/junit.jar:$CLASSPATH
[/sourcecode]

コマンドラインから実行

以下のソースを動かしてみる. ここでは, Lab2Test.java というファイル名.

[sourcecode language=”java” title=””]
import static org.junit.Assert.*;
import org.junit.Test;

public class Lab2Test {
public static int num () {
return 10;
}

@Test
public void test () {
assertEquals (10, num ());
}
}
[/sourcecode]

コンパイルは普通に実施.

[sourcecode language=”bash” title=””]
javac Lab2Test.java
[/sourcecode]

コマンドラインから実行するには, java org.junit.runner.JUnitCore [クラス名] という書き方をして実行する.

[sourcecode language=”bash” title=””]
$ java org.junit.runner.JUnitCore Lab2Test
JUnit version 4.11
.
Time: 0.004

OK (1 test)
[/sourcecode]

クラスが増えてきたら, プログラムにクラス名を書く方法もある. 以下, 参照.

Ant を利用する

すこし大きなコードを扱うときはビルドツールとの連携が役に立つ. ここでは, ant を利用してみる.

build.xml を作成.

JUnit で必要な情報は, ここが詳しい.

[sourcecode language=”xml” title=””]














[/sourcecode]

エラー詳細を表示するためには, の 1 行が必要.

Eclipseで自動生成

<div class="outline-text-3" id="text-unnumbered-5">
  <p>
    もっといい方法を発見したので、追記.
  </p>

  <p>
    Eclipseでbuild.xmlは自動生成ができる.
  </p>

  <p>
    自動生成したいプロジェクトを選択して、
  </p>

  <ul class="org-ul">
    <li>
      Eclipseメニューから「ファイル」>「エクスポート」を選択.
    </li>
    <li>
      [エクスポート]ダイアログから, [一般] > [Antビルド・ファイル]を選択.
    </li>
  </ul>

  <p>
    以下のようなbuild.xmlが生成される. 手動で build.xmlを記述するのがバカらしくなった.
  </p>

  <p>
    [sourcecode language=&#8221;xml&#8221; title=&#8221;&#8221;]<br /> <?xml version="1.0" encoding="UTF-8" standalone="no"?><br /> <!&#8211; WARNING: Eclipse auto-generated file.<br /> Any modifications will be overwritten.<br /> To include a user specific buildfile here, simply create one in the same<br /> directory with the processing instruction <?eclipse.ant.import?><br /> as the first entry and export the buildfile again. &#8211;><project basedir="." default="build" name="tdd_by_example"><br /> <property environment="env"/><br /> <property name="ECLIPSE_HOME" value="../../../../usr/share/eclipse/"/><br /> <property name="junit.output.dir" value="junit"/><br /> <property name="debuglevel" value="source,lines,vars"/><br /> <property name="target" value="1.7"/><br /> <property name="source" value="1.7"/>
  </p>

  <p>
    <path id="Junit4.userclasspath"><br /> <pathelement location="../../../../usr/share/java/junit.jar"/><br /> </path><br /> <path id="tdd_by_example.classpath"><br /> <pathelement location="bin"/><br /> <path refid="Junit4.userclasspath"/><br /> </path><br /> <target name="init"><br /> <mkdir dir="bin"/><br /> <copy includeemptydirs="false" todir="bin"><br /> <fileset dir="src"><br /> <exclude name="**/*.ucls"/><br /> <exclude name="**/*.java"/><br /> </fileset><br /> </copy><br /> <copy includeemptydirs="false" todir="bin"><br /> <fileset dir="test"><br /> <exclude name="**/*.ucls"/><br /> <exclude name="**/*.java"/><br /> </fileset><br /> </copy><br /> </target><br /> <target name="clean"><br /> <delete dir="bin"/><br /> </target><br /> <target depends="clean" name="cleanall"/><br /> <target depends="build-subprojects,build-project" name="build"/><br /> <target name="build-subprojects"/><br /> <target depends="init" name="build-project"><br /> <echo message="${ant.project.name}: ${ant.file}"/><br /> <javac debug="true" debuglevel="${debuglevel}" destdir="bin" includeantruntime="false" source="${source}" target="${target}"><br /> <src path="src"/><br /> <src path="test"/><br /> <classpath refid="tdd_by_example.classpath"/><br /> </javac><br /> </target><br /> <target description="Build all projects which reference this project. Useful to propagate changes." name="build-refprojects"/><br /> <target description="copy Eclipse compiler jars to ant lib directory" name="init-eclipse-compiler"><br /> <copy todir="${ant.library.dir}"><br /> <fileset dir="${ECLIPSE_HOME}/plugins" includes="org.eclipse.jdt.core_*.jar"/><br /> </copy><br /> <unzip dest="${ant.library.dir}"><br /> <patternset includes="jdtCompilerAdapter.jar"/><br /> <fileset dir="${ECLIPSE_HOME}/plugins" includes="org.eclipse.jdt.core_*.jar"/><br /> </unzip><br /> </target><br /> <target description="compile project with Eclipse compiler" name="build-eclipse-compiler"><br /> <property name="build.compiler" value="org.eclipse.jdt.core.JDTCompilerAdapter"/><br /> <antcall target="build"/><br /> </target><br /> <target name="MoneyTest"><br /> <mkdir dir="${junit.output.dir}"/><br /> <junit fork="yes" printsummary="withOutAndErr"><br /> <formatter type="xml"/><br /> <test name="tdd_by_example.MoneyTest" todir="${junit.output.dir}"/><br /> <classpath refid="tdd_by_example.classpath"/><br /> </junit><br /> </target><br /> <target name="tdd_by_example"><br /> <mkdir dir="${junit.output.dir}"/><br /> <junit fork="yes" printsummary="withOutAndErr"><br /> <formatter type="xml"/><br /> <test name="tdd_by_example.MoneyTest" todir="${junit.output.dir}"/><br /> <classpath refid="tdd_by_example.classpath"/><br /> </junit><br /> </target><br /> <target name="junitreport"><br /> <junitreport todir="${junit.output.dir}"><br /> <fileset dir="${junit.output.dir}"><br /> <include name="TEST-*.xml"/><br /> </fileset><br /> <report format="frames" todir="${junit.output.dir}"/><br /> </junitreport><br /> </target><br /> </project><br /> [/sourcecode]
  </p>
</div>

Emacs で利用する

<div class="outline-text-3" id="text-unnumbered-6">
  <p>
    Emacs で ant を実行するときは, -emacs オプションをつける
  </p>

  <p>
    [sourcecode language=&#8221;bash&#8221; title=&#8221;&#8221;]<br /> $ ant -emacs test<br /> [/sourcecode]
  </p>

  <p>
    エラーした場合, エラー箇所にジャンプできる.
  </p>
</div>