掲題の通り、Perl におけるテストに関するモジュールの情報をまとめてみました。
既に類似の記事もありましたが(後述)、自分が最近使ったモジュールの情報がなかったりしたので、自分なりにまとめ直すことにしました。
そこそこ書いてみたつもりですが、そんなに網羅性は高くないと思います。
ここで紹介しきれていないモジュールについては、末尾の参考記事等をご参照下さい。
他に抑えておいた方がいい、よく使われるモジュールもあると思います。
何かありましたら、コメントや編集リクエストをお待ちしています。
フレームワーク系モジュール
Test::Xxx
なモジュールは数多あるのですが、Perl でテストを書くために必要十分なモジュールをここでは「フレームワーク系モジュール」と称することにします。
Test::More
Perl におけるテストのためのデファクトスタンダードといえるモジュールでしょう。
こだわらない人はとりあえずこれを使っておけばいいと思います。
機能に不足を感じたら別のモジュールで補うということもできます。
Test::Simple
Test::More よりも機能を絞った簡素なモジュールのようです。
筆者は使ったことがありません。
ふつうは Test::More を使えばいいと思います。
敢えて Test::Simple を使うのは Yet Another な Test::Xxx
を作りたいときぐらいではないでしょうか。
- http://search.cpan.org/dist/Test-Simple/lib/Test/Tutorial.pod … Test::Simple を使ったテストのチュートリアル
Test::Most
Test::More の機能に物足りなくなってきたあなたのためのモジュールです。
内部で Test::Xxx
なモジュールを use して関数を export しており、執筆時点(2015/5/24) の v0.34 では以下で置き換えられるとドキュメントに書かれています。
use strict;
use warnings;
use Test::Exception 0.88;
use Test::Differences 0.500;
use Test::Deep 0.106;
use Test::Warn 0.11;
use Test::More;
Test::Base
色んなデータパターンでテストするときにすっきり書けるようにしてくれるものです。
ドキュメントでは Test::Base を拡張してユーザ独自モジュールを作る例が載せられていますが、Test::Base 単体でも利用可能です。
Test::Class
筆者は使ったことがないので参考記事から引用すると、「xUnit スタイルで Perl のテストを書けるフレームワーク」だそうです。
Test::Declare
@nekokak さん作の、テストコードをDSLで宣言的に書けるようにしてくれるモジュールです。
テストコードがごちゃごちゃしてきたと思ったら試してみるといいことがあるかもしれません。
内部で Test::More,Test::Deep,Test::Exception,Test::Warn,Test::Output を use して関数を export しています。
テスト機能拡張モジュール
テスト用の便利な関数や機能を提供してくれるモジュールです。
中には Test::Exception
など「フレームワーク」として単体で使えるものもあるのですが、特定の機能に特化しているものはこちらに入れています。
Test::Deep
ネストが深いデータ構造の比較を可能にしてくれます。
単純な1階層のハッシュや配列(リファレンス含む)の比較であれば、 Test::More::is_deeply
で十分なケースもあると思います。
Test::Difference
これも Test::More::is_deeply
の機能強化版のようです。
比較結果が見やすそうです。
Test::Exception
実行時エラーや die
, そのときのメッセージなどをテストできるようにしてくれます。
die
しないことのテストにも使えます。
Test::MockObject
stub メソッドを作って、オブジェクト(モジュール) をでっち上げることを可能にしてくれます。
開発担当が分かれていて、該当のモジュールが出来ていないときや、「この関数がこれこれを返す」ことを前提としてテストを書きたいときに使えるでしょう。
Test::MockObject::Extend というモジュールも同梱されており、これを使うとモジュールのインスタンス(blessed reference)を MockObject 化することができます。
Test::Mock::Guard
Test::MockObject のように stub 関数を作れるものですが、特定のブロック内で stub 化してくれます。
スコープを抜けたら元の挙動に戻ります。
テスト支援系モジュール
直接テストの機能を提供するものではありませんが、テストのための機能を持つモジュールです。
Test::mysqld
テスト時に mysqld を起動して、MySQL に依存するテストを可能にしてくれるモジュールです。
データベース Fixture 系
DB のテストをするときには Fixture を使ってデータをロードしたいことがあると思います。
これを簡単に実現してくれるモジュールがいくつかあるのでまとめて書いておきます。
Harriet
テストのときに mysqld や memcached など daemon の起動・停止をカジュアルに実現してくれるツールです。
その他のテスト関連モジュール
Test::Harness
prove
コマンドの内部で使われているモジュールです。
もっとたくさんあります!!
PerlでTDD(テスト駆動開発)するなら覚えておきたいCPANモジュール群 | hirobanex.net という記事でも多数紹介されています。