サンプル用のテストクラスを作成します。ここではスタックのテストとします。
package learning.tdd; import junit.framework.TestCase; public class MyStackTest extends TestCase { }
テストメソッドをひとつ書いておきましょう。最初のテストは、作成直後のスタックのサイズが0であることをテストするものとしましょう。*1
package learning.tdd; import junit.framework.TestCase; public class MyStackTest extends TestCase { public void testDefaultStackSizeShouldBeZero() throws Exception { } }
以降テストメソッド"testDefaultStackSizeShouldBeZero"の中のみを書いていきます。
さて、テスト名が決まったらassert文を書きましょう。さっそく先程登録したテンプレートを使います。
public void testDefaultStackSizeShouldBeZero throws Exception { ae }
"ae"まで書いたところでCtrlを押しながらSpaceを押します(EmacsキーバインドではAlt + /)。すると先程登録された"assertEquals template"が選択候補に出てきますので、選択します。
public void testDefaultStackSizeShouldBeZero throws Exception { assertEquals("msg", expected, actual); }
すると先程のテンプレートの中身が出力されます。このときにフォーカスが「msg」の上に当たっているはずです。ここでまだEnterキーを押さずに、そのままアサーションメッセージを書き始めます。ここで、アサートしようとしているのは何なのかを考えて、アサーションメッセージにします。
public void testDefaultStackSizeShouldBeZero throws Exception { assertEquals("作成直後のスタックのサイズは0であること", expected, actual); }
日本語でアサーションメッセージを書いているので一回だけEnterを押して日本語変換を確定し、その後半角入力モードに戻ります。まだアサーションメッセージのところにフォーカスが当たったままのはずです。ここでTabキーを押します。すると「expected」の上にフォーカスが移動するはずです。
public void testDefaultStackSizeShouldBeZero throws Exception { assertEquals("作成直後のスタックのサイズは0であること", expected, actual); }
期待値を書き込みます
public void testDefaultStackSizeShouldBeZero throws Exception { assertEquals("作成直後のスタックのサイズは0であること", 0, actual); }
"0"を書き込んだら、まだEnterを押さずにTabを押します。フォーカスが次の「actual」に移動します。
public void testDefaultStackSizeShouldBeZero throws Exception { assertEquals("作成直後のスタックのサイズは0であること", 0, actual); }
ここで、テストしようとしている対象メソッドは何なのかを考え、"stack.size()"を書きます。
public void testDefaultStackSizeShouldBeZero throws Exception { assertEquals("作成直後のスタックのサイズは0であること", 0, stack.size()); }
まだ"stack.size()"の上にフォーカスが当たっているはずです。ここでEnterを押します。するとカーソルが行末に移動します。この後テストの続きを(stackの参照を作るところから)書いていきますが、今日のお題としてはここまでです。
これがアサートファースト、いや、「アサーションメッセージファースト」です。私たちは毎日このような方法でassertion message firstしています。
*1:この文章では横幅をケチるためにインデントを2スペースで行っています。普段は4スペースです