import static junit.framework.Assert.*;
import org.junit.*;
public class CalculatorTest {
:
/**
* 割り算テスト
*/
@Test
public final void testDiv() {
Calculator cal = new Calculator(0);
//0/10=0
assertEquals(0, cal.div(10).getValue());
//(0+60)/2/3=10
assertEquals(10, cal.add(60).div(2).div(3).getValue());
}
/**
* 割り算テスト(異常系)
*/
@Test(expected = IllegalArgumentException.class)
public final void testDivZero() {
Calculator cal = new Calculator(0);
cal.div(0);
}
これを、Groovy を使った easyb で記述すると、このようになるでしょう。
import Calculator
scenario "10の値を持つ計算機オブジェクトに5を除算する", {
given "値が10の計算機オブジェクトを生成する", {
calculator = new Calculator(10)
}
when "計算機オブジェクトに5を除算する", {
calculator.div(5)
}
then "計算機が保持する値は2である", {
calculator.value.shouldEqual 2
}
and "計算機が保持する値は正である", {
ensure(calculator.plus)
}
}
scenario "計算機オブジェクトを0で除算して例外を発生させる", {
given "計算機オブジェクトを0で除算する", {
var = {
(new Calculator(10)).div(0)
}
}
then "例外が発生する", {
ensureThrows(IllegalArgumentException) {
var.call()
}
}
}
あえて容易な題材に大量のコメントを入れていますが、ニュアンスは分りやすくなったと思います。記載内容は、テストでも振る舞いでも同じです。ですが、振る舞いの場合、シナリオ形式で書きますので、given, when, then のリズムで記述することが保証されます。この形式が徹底されることで、以下のように、ストーリーとして振る舞いを出力することが可能となります。
Stories Text
8 scenarios executed successfully.
Story: calculator
:
scenario 10の値を持つ計算機オブジェクトに5を除算する
given 値が10の計算機オブジェクトを生成する
when 計算機オブジェクトに5を除算する
then 計算機が保持する値は2である
then 計算機が保持する値は正である
scenario 計算機オブジェクトを0で除算して例外を発生させる
given 計算機オブジェクトを0で除算する
then 例外が発生する