【Java】JUnitでテスト
今回はJUnitに関する記事になります。
仕事上テストする機会も増えてきたので自分なりにまとめてみます。
まず、JUnitは単体テストを行うフレームワークです。
Javaを触っている方なら耳にする機会も多いと思います。
単体テストとは、作成したプログラムが意図した動作をするか機能ごとに検証することを言います。
私自身、JUnitに関してはほぼ知識ゼロでした。
似たようなところでDJUnitというものもあるのですが、そっちを少しさわったことがあるくらい。
では実際にテストしてみます。
事前準備としてコチラからJUnitのjarをダウンロードします。
リンクに飛んだらすぐダウンロードされるので注意。
ダウンロードしたjarを、使用するプロジェクトでビルドパス通しておきましょう。
プロジェクトを右クリック→「ビルド・パス」→「ビルド・パスの構成」と進んでいきます。
外部jarの追加をクリックし、ダウンロードしたjarを選択→Open。
あとは適用して閉じればOKです。
参照ライブラリーにjarが追加されていれば完了。
次にテスト対象となるソースを用意します。
今回は計算を行うクラスのテストを行ってみます。
Main.java
public class Main { public static void main(String[] args) { Calc calc = new Calc(); int value = calc.sum(4, 7); System.out.println("足し算の結果は" + value); } }
Calc.java
public class Calc { public int sum(int a, int b) { return a + b; } public int diff(int a, int b) { return a - b; } }
Calcが計算を行うクラスですね。
Mainがそれを実際に使用しています。
では、Calcのテストを行ってみましょう。
まずはCalc.javaを右クリック→新規→その他をクリック。
「JUnit」と入力し「JUnit テスト・ケース」を選択し次へ。
あとはとりあえずデフォルトのまま完了でOKです。
そして作成されたテストクラスが以下のようになっています。
ここに自分でテストコードを書いていきます。
「@Test」というアノテーションを付与することでJUnitがテストメソッドであることを認識できます。
ちなみにテストメソッドはpublic voidである必要があるみたいです。
1つテストを実装してみます。
CalcTest.java
import static org.hamcrest.CoreMatchers.*; import static org.junit.Assert.*; import org.junit.Test; public class CalcTest { @Test public void sum_test01() { int TEST_VALUE1 = 1; int TEST_VALUE2 = 3; int EXP_VALUE = 4; Calc calc = new Calc(); int result = calc.sum(TEST_VALUE1, TEST_VALUE2); assertThat(result, is(EXP_VALUE)); } }
このテストでは、まず引数として指定する値をTEST_VALUE、期待値をEXP_VALUEで用意しています。
その後、実際にテストしたいメソッドを呼び出して処理を行います。
最後にassertThatメソッドで処理結果と期待値を比較します。
テストの実行方法は、テストクラスを右クリック→「実行」→「JUnitテスト」でOK。
実行結果はJUnitのウィンドウで表示されます。
緑色のゲージはテストが成功していることを示します。
テストの一連の流れなこんな感じです。
あとは補足と言うか、ちょっと細かい話とか。
テスト観点について少しお話をします。
上記のテストはsumメソッドに対するテストのほんの一部です。
実際には、引数に0や負の数を与えた時の挙動を見るテストも必要になってきます。
場合によってはテストケースが無限に考えられる場合もあると思います。
基本的には上限と下限、そして0やnullのテストは必須と言えるでしょう。
地道ではありますが、ここで単体テストの品質を高めておくことで結合テストもスムーズに行えるはずです。
続いて私の個人的な思いのお話。
今回紹介したテストもそうなんですけど、そんな当たり前なテストって意味あるの?って最初の頃は思っていました。
でも実際はもっと複雑なメソッドをテストしなければいけません。
例えば、メソッドの中でメソッドを呼んでいて、さらにその中でも他のメソッドを呼んでいたりすると期待値がわかりづらく大変です。
そんな時にJUnitで結果が期待通りかを試せるのはとても便利です。
まだまだテストは奥が深いので、JUnitの記事第2弾を書く予定でいます。
今回は以上になります。