こんにちは。「Javaを復習する初心者」です。
今回はJUnitテストの@Beforeアノテーションと@Afterアノテーションを使ってみました。
JUnit4.4では@Beforeアノテーション、@Afterアノテーションを使うことができます。メソッドに@Before・@Afterアノテーションを付与すると、そのメソッドはテストメソッド実施の前・後に実行されます。
テストするクラス
今回テストするクラスは以下のStudentクラスです。
public class Student {
private String id;
private int subject1;
private int subject2;
private int subject3;
private int subject4;
private int subject5;
public Student(String id, int subject1, int subject2, int subject3, int subject4, int subject5) {
this.id = id;
this.subject1 = subject1;
this.subject2 = subject2;
this.subject3 = subject3;
this.subject4 = subject4;
this.subject5 = subject5;
}
public boolean isPass() {
double avg = (double)(subject1 + subject2 + subject3 + subject4 + subject5) / 5.0;
return avg >= 50;
}
-以下getter/setter-
}
生徒の成績を扱うイメージのクラスです。5教科の点数をフィールドに持ちます。isPass()メソッドで合否を返却します。trueの場合は合格です。5教科の点数の平均が50以上なら合格という設定にしました。
テストケース
さて、このisPass()メソッドをテストしようと思います。テストケースは以下の通りです。
case | 教科1 | 教科2 | 教科3 | 教科4 | 教科5 | 期待値 |
---|---|---|---|---|---|---|
No. 1 | 50 | 50 | 50 | 50 | 50 | true |
No. 2 | 49 | 50 | 50 | 50 | 50 | false |
No. 3 | 50 | 49 | 50 | 50 | 50 | false |
No. 4 | 50 | 50 | 49 | 50 | 50 | false |
No. 5 | 50 | 50 | 50 | 49 | 50 | false |
No. 6 | 50 | 50 | 50 | 50 | 49 | false |
上記の6パターンを作りました。No. 1ではすべての科目が50点なので期待値がtrueです。No. 2から6はどれか一つが49で他は50点なのでfalseです。このテストをする場合、最初にコンストラクタですべての科目を50にして、適宜変更な必要な科目のみをsetterメソッドで変更するのが簡潔だと思います。そのため、テストクラスにStudentクラス型変数を定義しておいて、@Beforeアノテーションでインスタンスを生成して格納するやり方がよさそうです。
@Afterアノテーションについては今回は動作を確認するのみにしました。コンソールに5つの科目の点数を出力するのみにしました。
以下が作成したテストケースと結果です。
public class StudentTest {
Student student;
@Before
public void setup() {
student = new Student("01", 50, 50, 50, 50, 50);
}
@Test
public void test1() {
assertThat(student.isPass(), is(true));
}
@Test
public void test2() {
student.setSubject1(49);
assertThat(student.isPass(), is(false));
}
@Test
public void test3() {
student.setSubject2(49);
assertThat(student.isPass(), is(false));
}
@Test
public void test4() {
student.setSubject3(49);
assertThat(student.isPass(), is(false));
}
@Test
public void test5() {
student.setSubject4(49);
assertThat(student.isPass(), is(false));
}
@Test
public void test6() {
student.setSubject5(49);
assertThat(student.isPass(), is(false));
}
@After
public void tearDown() {
System.out.printf("%d %d %d %d %d",
student.getSubject1(),
student.getSubject2(),
student.getSubject3(),
student.getSubject4(),
student.getSubject5());
System.out.println();
}
}
50 50 50 50 50
49 50 50 50 50
50 49 50 50 50
50 50 49 50 50
50 50 50 49 50
50 50 50 50 49
setup()メソッドで変数studentに新しくインスタンスを格納しています。このとき、すべての科目の点数を50点に設定しています。テストケース2からはsetterメソッドを呼び出して、一つの科目だけ49点に設定しています。
結果では、テストケース2から点数が49点の科目が一つだけ設定されているのが分かります。