本連載では第一線のPerlハッカーが回替わりで執筆していきます。今回のハッカーはakiymこと秋山卓巳さんで,
本稿のサンプルコードは,
Perlでのテスト
Perlではテストを書く際に,Test::Moreというモジュールが広く使われています。これは,
本稿のテーマであるTest2は,Test::Moreなどのバックエンドとして使われているTest::Builderを置き換えるべく開発されているテスティングフレームワークです。2015年ごろよりChad Granum氏によって作られています。
- 注1)
- Perlでの基本的なテストの方法に関しては,
本連載第36回 「Perlのテストモジュールの使い方・ 作り方―Test::More, 」Test::Builder, Test::Stream, そしてPerl 6 を参照してください。
Test::Builderの問題点
Test::Builderは,
Test::Builderの問題として,Test::Builderの関数を直接上書きするモンキーパッチによる対応でしか行えない状況でした。
この問題を解決するため,
ちなみに,Test::Builderは今後どうなるのでしょうか。メンテナンスされないまま,Test::Builderの内部ではTest2のAPIを呼び出すように書きなおされており,
Test2にすると変わること
Test2は,Test::BuilderやTest::Moreが含まれるTest-Simpleディストリビューションのバージョン1.
気になるのは,Test::MoreをはじめとするTest::Builderを使った既存のテストモジュールが壊れることがないように,Test::Builderをモンキーパッチによって拡張していた場合には正しく動作しないことがあります。また,Test2::Transionを参照してください。
Test2::V0を使ったテスト
ここからは,Test2::V0を使ったテストを紹介します。Test2::V0はTest2の作者によって作られた,Test2-Suiteディストリビューションに含まれるモジュールです。Test2はフレームワークであるため基本的な機能しか提供されていませんが,Test2::V0では一歩踏み込んだ機能が実装されています。Test::Moreで提供されるテスト関数が使えるのはもちろんのこと,
まずはcpanmコマンドにより必要なモジュールをインストールします。Test2::V0をインストールすると,Test-Simple,Test2-Suiteディストリビューションに含まれるモジュールも一緒にインストールされます。
$ cpanm Test2::V0
なお,
use Test2::V0と書くことで,
実際にビルトイン関数の動作を確かめる単純なテストを書いてみます。ここでは,Test2::V0のok関数を使って,
ucfirst.
use Test2::V0;
ok ucfirst('foo') eq 'Foo',
'先頭の文字がuppercaseになっている';
ok uc('foo') ne 'foo', 'fooとは一致しない';
done_testing;
※ これ以降に登場するコードでは,use Test2::V0;は省略します
テストを実行すると次の結果が出力され,
ucfirst.
$ perl ucfirst.t
# Seeded srand with seed '20180625' from local date.
ok 1 - 先頭の文字がuppercaseになっている
ok 2 - fooとは一致しない
1..2