LoginSignup
34
38

More than 5 years have passed since last update.

Perl のテストに関するモジュールをまとめてみる

Last updated at Posted at 2015-05-24

掲題の通り、Perl におけるテストに関するモジュールの情報をまとめてみました。

既に類似の記事もありましたが(後述)、自分が最近使ったモジュールの情報がなかったりしたので、自分なりにまとめ直すことにしました。

そこそこ書いてみたつもりですが、そんなに網羅性は高くないと思います。
ここで紹介しきれていないモジュールについては、末尾の参考記事等をご参照下さい。

他に抑えておいた方がいい、よく使われるモジュールもあると思います。
何かありましたら、コメントや編集リクエストをお待ちしています。

フレームワーク系モジュール

Test::Xxx なモジュールは数多あるのですが、Perl でテストを書くために必要十分なモジュールをここでは「フレームワーク系モジュール」と称することにします。

Test::More

Perl におけるテストのためのデファクトスタンダードといえるモジュールでしょう。

こだわらない人はとりあえずこれを使っておけばいいと思います。
機能に不足を感じたら別のモジュールで補うということもできます。

Test::Simple

Test::More よりも機能を絞った簡素なモジュールのようです。
筆者は使ったことがありません。
ふつうは Test::More を使えばいいと思います。

敢えて Test::Simple を使うのは Yet Another な Test::Xxx を作りたいときぐらいではないでしょうか。

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 という記事でも多数紹介されています。

Perl のテストに関するまとまった情報

34
38
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
34
38