Chat (Lingr.com)
Informaiton
Daily
Column
- MySQL日本語の旅(5/1)
- アクセス向上秘伝(5/9)
- 一風変ったHaskellλ門(6/13)
- SICP Answer Book (5/31) 問題3.26追加
Zope Solution
Extra
アーカイブ
OSS案内所
Site Info
関連リンク
森川が起動したJunitを見て、内村はつぶやいた。
「こんな簡単なツールでテストできるんですか?」
「あぁ、見た目はたいしたことないけど、これを使うようになると、プログラミングに対する考え方が180度変わるぞ。」
いまいち実感が沸いていない様子の内村だったが、森川自身も最初はこの小さなツールがどれほど威力があるのか内村同様分かっていなかったので、あえてフォローはしなかった。
ここは、いろいろ説明するよりも、テストのやり方を見せるのがいいだろう...
森川は、淡々とテストコードを書いていった。
import junit.framework.*;
public class MaterialTester extends TestCase
{
private Material m_fixture;
protected void setUp()
{
m_fixture = new Material();
}
public void testExecute()
{
}
public void testExecute()
{
assertEquals( "mba01が起動できない", true, m_fixture.Execute( "test01", "mba01", "NEW" ) );
assertEquals( "mba02が起動できない", true, m_fixture.Execute( "test01", "mba02", "NEW" ) );
assertEquals( "mba03が起動できない", true, m_fixture.Execute( "test01", "mba03", "NEW" ) );
...
}
}
テストコードをコンパイルして、Junitで走らせる。
よし、うまくいった。
森川の口元が軽くほころぶ。
何をやっているのか把握できず、それまで呆然としていた内村が、唐突に森川に聞いた。
「assertEqualsってなんですか?」
「期待値と実測値を比較するテスト用のメソッドだよ。ここでは、教材起動のメソッドを呼び出したときに成功しているか失敗しているかをテストするのに、assertEqualsを使ってる。MaterialクラスのExecuteメソッドを呼んだ結果が、trueなら教材起動成功でfalseなら失敗だから、存在する教材を起動したときは全部trueになることをテストするテストコードって訳だ。」
「えーと...Junitでそのテストコードを実行しているってことですか?」
「そうそう。緑のバーが出ているときは、テストが全て成功したということだね。」
森川は、内村から返事が返ってくる前に、テストコードをいじってJunitを走らせた。
すると、Junitに赤のバーが表示された。
「たとえば、テスト失敗のときは、こんな感じで赤くなる。」
「はっはぁ、なるほど〜。」
「後は、データベースに入っている教材データから教材IDを引っ張り出して、このテストコードに一通り追加してやれば、教材全部をテストできるようになるよ。」
ようやく内村は、何ができるようになったか理解したようだ。
もう説明は必要ないなと思った森川がキーボードとマウスを手放すと、内村はそれを手元に引き寄せ、素早い手つきでデータベースから200件以上の教材データをテキストで出力し、エディタのマクロを使ってテストコードを生成した。
今度は、内村がJunitを走らせる。
テスト成功を示す緑のバーが表示される。
内村は笑いと驚きを表情に見せつつ、確信めいた声で森川に聞いた。
「これでテストがかなりラクになるんじゃないですか?」
「あぁ。とりあえずテストコードがあればね。ただ、どんなメソッドに対しても、今回のように簡単にテストが書ける訳じゃないから、あまり楽観視はできないけど...まぁ、今までは手作業でしかテストできていなかった訳だから、それに比べれば、ずいぶん進歩したことにはなるね。」
森川は、内心ホッとした。
内村が、ユニットテストという新しい方法に拒否反応を示すのではないかといくらか危惧していたが、自分がユニットテストを行ったときと同じように、とても好意的だった。
『よし、これでXPを始めるきっかけは作れた。』
内村が感じるものとは別の種類の安堵を覚えた森川だった。
There is no comment.