PerlでのTest駆動開発にチャレンジ


最近読み進めている「web開発の基礎徹底攻略」に、Rubyをサンプルとしたテスト駆動開発のやり方の記事が載っていたので、Perlでも試してみました。


ずっとオレ流でコードを書いているので、最近は名前の付け方、テストの書き方など、一歩深く学びたいなーと思っていたところに調度良い教材があったので、試してみました。


本の記事では、RspecというRubyのモジュールを使って、RubyでFizzBuzzクラスのコードを書くという記事だったので、Perlで試すにあたって、


・オブジェクト指向はまだ良くわかっていないので、sub fizzbuzzというサブルーチンを完成させる。

・fizzbuzz.plというファイルに、sub fizzbuzz というサブルーチンを作成し、引数を1つ与えると対応する値を返すコードとした。

・テストに使用するモジュールは、昨年のPerl入学式で教わったTest::Moreというモジュールを使う。

とい風にアレンジしてみました。


PerlでTestを書くにあたり、参考にさせていただいたサイトはxaicronさんのこちらの記事。


まずは、テストモジュールの土台を書いてみる。ファイル名の拡張子は.t。

use strict;
use warnings;
use Test::More;

#ここにテストを書いていく。

done_testing;


そして、テスト対象のモジュール名はfizzbuz.plとし、対象モジュールが読み込めるかのテストを書く。


require_ok( 'fizzbuzz.pl' );


テストは、記事の順序通り、テストを1つ増やして->通るコードを書き->コードを整理する(リファクトたリング)のサイクルを進めていきます。進め方は非常に丁寧に解説されており、初TDDの自分にもわかりやすい非常に初心者向けの良記事です。同じ手順を書いちゃう訳にはいかないので、最終的に出来上がったテストコードがこちら。



出来上がったFizzBuzzのコードがこちら。




テストが全て通ると、こんな感じに。

fizzbuzz


簡単なテスト駆動開発を試してみて感じたことは、fizzbuzzの最大の落とし穴、15の倍数の時(fizzbuzzを返すとき)のケースをテストで書いておけば、確実にコードの穴が発見出来て素晴らしって事です。

今までは頭の中だけでコードを考えて、いざ「出来た!」って動かしてみた時、自分自身で想定できていなかった事がポロポロあったのが、テストをちゃんと書いておけば防げるんだなーと思いました。


今後の課題は、もっと実用的なテストコードを書けるようになりたい。


しかし、「web開発の基礎徹底攻略」は初心者にとって、本当に分かりやすくていい本ですね。おかげで「Perl徹底攻略」の方はまだ未開封状態です。