Java JUnitの使い方

JUnit とはJavaで開発されたプログラムにおいてユニットテスト(単体テスト)の自動化を行うためのフレームワークである。

JUnitのインストール

  1. WebブラウザでJUnitのWebサイトを開く。
    http://junit.org/
  2. 「Download and Install guide」リンクをクリックする。
  3. 「junit.jar」をクリックする。
  4. 必要なバージョンのjarをクリックする。
  5. ファイルのダウンロードが始まる。
  6. 同様に「hamcrest-core.jar」もダウンロードする。

テストプログラムの作成

テストプログラムの作成は以下のように行う。

JUnitを用いたテストプログラムの例を示す。

import org.junit.Assert;
import org.junit.Test;
import org.junit.runner.JUnitCore;

public class SampleTest {

  @Test
  public void testCase1() {
      String expected = "success";
      String actual   = "success";
      // 期待値と結果が等しい場合はテスト成功
      Assert.assertEquals(expedted, actual);
  }

  @Test
  public void testCase2() {
      String expected = "success";
      String actual   = "failure";
      // 期待値と結果が異なる場合はテスト失敗(例外がスローされる)
      Assert.assertEquals(expedted, actual);
  }
}

テストプログラムの実行

テストプログラムの実行方法は、テストクラスを引数に指定して org.junit.runner.JUnitCore を実行する。

java org.junit.runner.JUnitCore testClass1 [testClass2...]

もしくは、テストクラスにmainメソッドを作成し、 org.junit.runner.JUnitCore.main メソッドを呼び出す。

public static void main(String[] args) {
  JUnitCore.main(SampleTest.class.getName());
}

アノテーション

JUnitは次のアノテーションをサポートしている。

アノテーション 説明
@org.junit.Test テストメソッドを宣言する。
@org.junit.Before 各テストメソッドの実行前に呼び出される。
@org.junit.After 各テストメソッドの実行後に呼び出される。
@org.junit.BeforeClass 各テストクラスの実行前に1度だけ呼び出される。
@BeforeClassアノテーションを付けるメソッドはstaticにする必要がある。
@org.junit.AfterClass 各テストクラスの実行後に1度だけ呼び出される。
@AfterClassアノテーションを付けるメソッドはstaticにする必要がある。
@org.junit.Ignore テストメソッドを一時的に無効にする。
@org.junit.Test(expected) スローされる予定の例外を宣言する。
@org.junit.Test(timeout) テストのタイムアウト時間を宣言する。
public class MyTest
{
  @org.junit.Test
  public void testCase1
  {
      // 処理
  }
}

import文を使えば、アノテーションを短縮形で記述することができる。

import org.junit.Test;

public class MyTest
{
  @Test
  public void testCase1
  {
      // 処理
  }
}

テストスイート

import org.junit.runner.RunWith;
import org.junit.runners.Suite;
import org.junit.runners.Suite.SuiteClass;

@RunWith(Suite.Class)
@SuiteClass({ クラス名.class [, クラス名.class...] })

org.junit.Assertクラス

テスト結果判定用メソッドは、テストに失敗するとjava.lang.AssertionErrorをスローする。

org.junit.Assert
Figure 1. org.junit.Assert
org.junit.Assertクラスのメソッド
メソッド 説明
assertEquals 期待値と実行結果が等しい場合、テスト成功
assertArrayEquals 期待値と実行結果が等しい場合、テスト成功
assertThat 実行結果が指定した条件を満たせば、テストが成功
assertNotNull オブジェクトがnull以外の場合、テスト成功
assertNull オブジェクトがnullの場合、テスト成功
assertSame オブジェクトが同一の場合、テスト成功
assertNotSame オブジェクトが不一致の場合、テスト成功
static void assertTrue(boolean cond ) condがtrueの場合、テスト成功
static void assertFalse(boolean cond ) condがfalseの場合、テスト成功
static void fail() 常にテスト失敗

assertEquals

期待値(expected)と実行結果(actual)が等しい場合、テストが成功する。

static void assertEquals(double expected, double actual)
static void assertEquals(long expected, long actual)
static void assertEquals(java.lang.Object expected, java.lang.Object actual)

assertArrayEquals

期待値(expected)と実行結果(actual)が等しい場合、テストが成功する。

static void assertArrayEquals(byte[] expected, byte[] actual)
static void assertArrayEquals(char[] expected, char[] actual)
static void assertArrayEquals(int[] expected, int[] actual)
static void assertArrayEquals(long[] expected, long[] actual)
static void assertArrayEquals(java.lang.Object[] expected, java.lang.Object[] actual)
static void assertArrayEquals(short[] expected, short[] actual)

assertThat

実行結果(actual)が指定した条件(matcher)を満たせば、テストが成功する。

static void assertThat(T actual, org.hamcrest.Matcher<T> matcher)

assertNotNull

オブジェクトがnull以外の場合、テストが成功する。

static void assertNotNull(Object obj)

assertNull

オブジェクトがnullの場合、テストが成功する。

static void assertNull(Object obj)

assertSame

オブジェクトが同一の場合、テストが成功する。

static void assertSame(Object expected, Object actual)

assertNotSame

オブジェクトが不一致の場合、テストが成功する。

static void assertNotSame(Object expected, Object actual)

org.hamcrest.Matchersクラス

org.hamcrest.Matchers
Figure 2. org.hamcrest.Matchers
org.hamcrest.Matchersクラスのメソッド
メソッド 説明
static < T > org.hamcrest.Matcher< T > is( T value ) valueと一致すれば真を返す。

参考文献

JUnit (2016) Assert (JUnit API) JUnit 4.13.2 API