JUnit実践入門 1日目(テストコードの作成〜実行まで)
JUnitとは:Javaのテスティングフレームワーク
役割
・テスト実行フレームワーク
・テストの期待値と実測値の検証
・テストケースのフォーマット
→どのようにテストを記述して、実行し、検証するかをサポートしてくれる。
テスト対象のクラスを作成する。
package junit.tutorial; public class Calculator { public int multiply(int x, int y) { return x * y; } public int divide(int x, int y) { return x /y; } }
testソースフォルダの作成
→一般的にテスト対象と異なるソースフォルダに作成する。
今回はプロジェクト直下に作成。
テストクラスの作成
以下のテストクラスが作成される
package junit.tutorial; import static org.junit.Assert.*; import org.junit.Test; public class CaluculatorTest { @Test public void test() { fail("まだ実装されていません"); } }
Quick JUnitの利用
キー入力無しでテストクラスが生成できる。メッチャ便利。
プロジェクトのテスト対象クラスを右クリックー実行ーJunitテスト
テストコードのルール
・テストクラスはpublicクラス
・テストメソッドはTestアノテーションを付与したpublicメソッド
・テストメソッドは戻り値がvoidであり、引数を持たない
・thorow句は自由に定義可能
→自動生成したテストクラスでは上記のルールに沿った形式でテンプレートが作られているので意識しなくともルールに乗っ取った形で作成できるが、エラーの原因となりかねるのでしっかりと覚えておくこと。
生成されたテストコードを実行するとエラーが発生。
jarファイルが足りないらしいので追加。
JUnit4.11にしたら、Hamcrestが無いってエラーが出たよ・・・
追加するとエラーが解消され、コードが実行された。
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- -
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
テストメソッドを日本語で書く(!?)
昔から議論が行われている模様。
曖昧さはなくなりそうなので導入して見たい。
→複数人で開発を実施する際には最初に決め事とすべきか。
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- -
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
実際に作成したテスト対象クラスを実行するようにテストコードを作成。
package junit.tutorial; import static org.hamcrest.CoreMatchers.*; import static org.junit.Assert.*; import org.junit.Test; public class CalculatorTest { @Test public void multiplyで乗算結果が取得できる() { Calculator calc = new Calculator(); int expected = 12; int actual = calc.multiply(3, 4); assertThat(actual, is(expected)); } }
作成したテストコードを実行して見ると、JUnitのViewの障害トレースにエラーログが表示されず、グリーンバーが表示された。
これでテストコードとしてはテスト成功を意味している。
ただ、テストコードは成功したが、実際のテストとしては網羅していないパターンがまだあるはずなので
テストコードをさらに追加する。
追加するテストパターン:5と7の乗算
package junit.tutorial; import static org.hamcrest.CoreMatchers.*; import static org.junit.Assert.*; import org.junit.Test; public class CalculatorTest { @Test public void multiplyで3と4の乗算結果が取得できる() { Calculator calc = new Calculator(); int expected = 12; int actual = calc.multiply(3, 4); assertThat(actual, is(expected)); } @Test public void multiplyで5と7の乗算結果が取得できる() { Calculator calc = new Calculator(); int expected = 12; int actual = calc.multiply(5, 7); assertThat(actual, is(expected)); } }
この状態で実行するとmultiplyで5と7の乗算結果が取得できる()メソッドがエラーとなる
→原因としてはassertThatメソッドで第一引数に指定しているactualの値を変更していないため。
エラーログには下記の情報が表示される。
Expected:期待された値
got:実際の値
このようにして、ユニットテストでは1つのメソッドに対して複数のテストを実施して精度を高めていく。