いざassertion message first開始!!

サンプル用のテストクラスを作成します。ここではスタックのテストとします。

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スペースです