26. テストコードの書き方
//プロダクトコード
public class Calculation {
/** 加法を行う */
public static int add(int x, int y) { return x + y; }
/** 減法を行う */
public static int sub(int x, int y) { return x - y; }
/** 乗法を行う */
public static int multi(int x, int y) { return x * y; }
/** 除法を行う */
protected static int div(int x, int y) {
if(y == 0) throw new IllegalArgumentException("Please pass a non-zero value to y.");
return x / y;
}
}
27. テストコードの書き方
//テストコード
public class CalculationTest {
//例外を検知する
@Rule
public ExpectedException expect = ExpectedException.none();
@Test
public void 加法の確認(){
assertEquals(3, Calculation.add(1, 2));
}
@Test
public void 減法の確認(){
assertEquals(4, Calculation.sub(6, 2));
}
@Test
public void 乗法の確認(){
assertEquals(12, Calculation.multi(6, 2));
}
@Test
public void 徐法の確認(){
assertEquals(2, Calculation.div(8, 4));
}
@Test
public void 徐法でゼロ除算させようとした場合に例外が発生することの確認(){
//デバッグすれば判るが、Ruleは毎回インスタンスを作り直すため、変更したら、変更しっぱなしにしておいて問題ない
expect.expect(IllegalArgumentException.class);
expect.expectMessage("Please pass a non-zero value to y.");
assertEquals(2, Calculation.div(8, 0));
}
}
かなり端折ってますが、
・メソッド名が項目になる(日本語OK)
・try-catchしなくても、
例外とそのメッセージの検査が可能
・protectedまでは小細工しないで検査可能