こんにちは~、ふじです。
本日はJUnitの勉強をしました。
今回は自身の備忘録としても残しておきたいので細かなメソッドも書いていきたいと思います。
Javaプログラムの単体テストを行うためのフレームワークです。
①テストクラスは「~Test.java」と記入する。
②テストメソッドは「test~()」とtestで始める。
③テストメソッドの前に「@Test」をつける。
④テストメソッドは「引数無し」+「返り値なし」。
⑤assertメソッドを用いて判定する。
というルールがあります。
テスト対象のクラスのフォルダとは別にテスト用のフォルダを作成します。
いちいちインポートしなくていいように、ソースフォルダをテストフォルダに設定します。
テストプログラムの作成をし実行します。
エラーが出ている場合は赤いバーが、エラーが出ていない場合は緑のバーがでます。
assertメソッドによりテスト結果が予想通りかどうか判定ができます。
主なassert メソッドは以下の、通りです。
assertEquals (String message, expected, actual); | -期待される結果と実際の結果が同じがどうか、判定する。異なる場合messageが表示される。 |
assertThat (String message, expected, is(not(actual))); | -以上系の判定に使用する。notを外せばassertEqualsメソッドと同じ動作が可能。 |
assertNull (String message, Object object) | -Objectがnullかどうかを判定する。 |
assertNotNull (String message, Object object) | -Objectがnullでないかどうかを判定する。 |
assertSame (String message, Object expected, Object actual) | -与えられた2つのObjectが同じObjectを参照しているか判定する。 |
assertTrue (String message, boolean condition) | -与えられた条件が正しいかどうか判定する。 |
これらをテストプログラムに組み込んで対象のクラスの動作テストをします。
覚えるのが大変そうですが、JUnitを使いこなせるようになれば単体テストの効率がグーンと上がりそうですね。
簡単な例になってしまいますが、書いていきたいと思います。
package junit.tutorial; // テスト対象クラス public class Calculator { // 掛け算するメソッド public int multiply(int x, int y) { return x * y; } }
まずテスト対象クラスを作り、
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)); } }
テストクラスを作成します。
作成する際にテスト対象クラスを指定して、そのクラスのメソッドをテストできるようにしています。
テストクラスの上のメソッドではテスト結果が成功するので緑のバーが表示されます。
下のメソッドではテスト結果でエラーが出るので赤いバーが表示されます。
JUnit使う前はちんぷんかんぷんでしたが、実際に書いてみると基本の動作はわかりました!
今回はJUnitの基本的な使い方について見てきました。
次回はSQLの勉強と並行して、
JUnit、単体テストのもうちょっと深いところまで勉強していきたいと思います。
では、また次回のブログで会いましょう~