吉祥寺.pmは一応(?)Perlのイベントなので、たまにはPerlのことを書いてみます。
Test2モジュール
Perlのテスティングフレームワークと言えばTest::More
がスタンダードですが、今リリースされているTest::More v1.3
以降では内部構造が全て作り直されていて、Test2
というモジュールがベースになっています。
Test2
モジュールでは、テストの結果やメッセージが全て「イベント」という形で取り出せるようになっていて、テストモジュールの作者は従来より確実にテストができるようになっています。
詳細は割愛しますが、従来のTest::More
ではテストモジュールのテストが難しい、という課題を解決するためにTest2
モジュールは作られました。
Test2::Suiteモジュール
さて、Test::More
の中身はTest2
モジュールを使って書き直されていますが、後方互換性を維持するため単にTest::More
を使うだけであれば、テストの書き方は従来とまったく変わりませんが、おなじくTest2
モジュールをベースにしたTest2::Suite
というモジュールを使うと、今までよりテストを書く上で便利な機能が使えるようになります。
例えばTest2::Bundle::More
を使えば、より詳細なメッセージを出力するis_deeply
が使えますし、Test2::Plugin::UTF8
というプラグインを使えば、Unicode文字列が正しく表示されるようになります。
use Test2::Bundle::More; use Test2::Plugin::UTF8; use utf8; my $hash1 = { name => "ガンダルフ" }; is_deeply($hash1, { name => "サルマン"}, "イスタルの名前"); done_testing;
実行すると(当然ハッシュの中身は一致しないので)テストが失敗し、その詳細なメッセージが表示されます。
$ perl test.t not ok 1 - イスタルの名前 # Failed test 'イスタルの名前' # at test.t line 8. # +--------+------------+----+----------+ # | PATH | GOT | OP | CHECK | # +--------+------------+----+----------+ # | {name} | ガンダルフ | eq | サルマン | # +--------+------------+----+----------+ 1..1
Test::More
のis_deeply
より読みやすい形式で出力されました。また日本語を出力しても、おなじみのWide Character...
のメッセージも出力されていません。
なお、Unicode文字列を表示する際には、Unicode::GCString
モジュールがインストールされていないと、正しい文字幅で表示できない旨の警告メッセージが表示されるので、併せてインストールしておいた方が良いようです。
おわりに
このようにTest2::Suite
を使うことでTest::More
より分かりやすいテストが書けるようになります。ぜひ使ってみてください。
- 作者: 深沢千尋
- 出版社/メーカー: 技術評論社
- 発売日: 2016/01/16
- メディア: 単行本(ソフトカバー)
- この商品を含むブログを見る