ユニットテストは、クラスやメソッドを対象としたプログラムを検証するためのテストであり、ソフトウェアの中では最も小さい粒度のテストです。
ユニットテストでは、対象のクラスやメソッドが期待された振る舞いをするかを検証し、テストが成功することによってそれを保証します。
この「期待された振る舞い」とは、言い換えれば、対象のクラスやメソッドの仕様です。
ユニットテストの特徴
ユニットテストはプログラムとして実行できる仕様書となることが特徴です。そして、ユニットテストが成功する限り、正確な仕様書となります。
クラスやメソッドの仕様を自然言語(日本語や英語)で記述して
テストを行うことは不可能ではありません。しかしながら、自然言語ではあいまいさを完全に排除することは難しく、句読点やニュアンスで読み手が誤解するかもしれません。
一方、クラスやメソッドの仕様をプログラムとして記述するならば、あいまいさが含まれることなく明確に記述できます。
【乗算メソッドのドキュメント】
public class Calculator {
/**
* 引数で与えられた2つの値を掛け合わせた値を返す
* @param x 1つ目の引数
* @param y 2つ目の引数
* @return xとyを掛け合わせた値
*/
public int multiply(int x, int y) {
return x * y;
}
}
jUnitによるユニットテストでは対象のクラスやメソッドの仕様を実行できる形式で記述できます。
また、このとき作成したコードは対象のクラスやメソッドの実行できるサンプルコードと考えることもできます。
そして、プログラマ自身が、作成したクラスやメソッドの最小のユーザです。もし、テストコードを書いているときに使いにくいと感じたならば、設計や仕様に問題があることに気づくこともできます。
また、プログラムとしてユニットテストを行う場合、最初にテストコードを記述するコストはかかりますが、実行するコストはほとんど必要ありません。したがって、何度でも繰り返し実行できますし、それを頻繁に行うことも可能です。
【乗算メソッドのテストコード】
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 = 35;
int actual = calc.multiply(5, 7);
assertThat(actual, is(expected));
}
}
最終更新:2016年01月21日 07:55