分123本連載では第一線のPerlハッカーが回替わりで執筆していきます。今回のハッカーはakiymこと秋山卓巳さんで,テーマは「Test2で変わるモダンなテスト」です。新たなテスティングフレームワークであるTest2を使ったテストの書き方や活用方法について紹介します。Vol.106」のサポートサイトから入手できます。PerlでのテストPerlではテストを書く際に,Test::Moreというモジュールが広く使われています。Protocol)形式で出力します(注1⁠)⁠。本稿のテーマであるTest2は,Test::Moreなどのバックエンドとして使われているTest::Builderを置き換えるべく開発されているテスティングフレームワークです。Granum氏によって作られています。6」を参照してください。Test::Builderの問題点Test::Builderは,Perlにおけるテストモジュールが行う基本的な動作を扱い,それをTAP形式で出力するモジュールです。Test::Builderの問題として,2001年ごろに作られたコードがメンテナンスされ使われ続けているため,拡張して使うのが難しいことがあります。テスト結果はTAP形式で出力されるため,1つのテストの結果が行単位で表され構造化されていないことから,テストモジュールのテストが困難になります。テスト出力のカスタマイズは,Test::Builderの関数を直接上書きするモンキーパッチによる対応でしか行えない状況でした。この問題を解決するため,拡張性に重点を置いた新たなテスティングフレームワークとしてTest2が開発されました。ちなみに,Test::Builderは今後どうなるのでしょうか。メンテナンスされないまま,古いコードが残っていくのでしょうか。実は,Test::Builderの内部ではTest2のAPIを呼び出すように書きなおされており,すでに全面的な新規コードでの置き換えがされています。そのため,古いインタフェースを使っている既存のテストモジュールはそのままで,新たに書き始めるテストモジュールは柔軟なインタフェースを持つTest2を使えます。Test2にすると変わることTest2は,Test::BuilderやTest::Moreが含まれるTest-Simpleディストリビューションのバージョン1.3以降から使われるようになっています。5.26.0から標準モジュールとして同梱されるようになりました。気になるのは,今動いている既存のテストをTest2にしたときにどうなるかでしょう。基本的には,Test::MoreをはじめとするTest::Builderを使った既存のテストモジュールが壊れることがないように,後方互換性を維持しつつ開発されています。例外として,Test::Builderをモンキーパッチによって拡張していた場合には正しく動作しないことがあります。いくつかのテストモジュールは,バージョンアップが必要になったり使えなくなったりします。詳しくは,Test2::Transionを参照してください。Test2::V0を使ったテストここからは,Test2の拡張性をもとにして作られたテストモジュールTest2::V0を使ったテストを紹介します。Test2::V0はTest2の作者によって作られた,Test2-Suiteディストリビューションに含まれるモジュールです。Test2はフレームワークであるため基本的な機能しか提供されていませんが,Test2::V0では一歩踏み込んだ機能が実装されています。Test::Moreで提供されるテスト関数が使えるのはもちろんのこと,複雑なデータ構造の比較やオブジェクトのモックといったテストにおけるさまざまな操作を行えます。cpanmコマンドにより必要なモジュールをインストールします。Test2::V0をインストールすると,Test-Simple,Test2-Suiteディストリビューションに含まれるモジュールも一緒にインストールされます。0.000114を前提として説明します。Test2::V0と書くことで,テストを行うための関数のエクスポートや,テストでの共通した処理の実行などをしてくれます。これはいわゆるボイラープレート(お決まりのテンプレート)の役割を果たします。実際にビルトイン関数の動作を確かめる単純なテストを書いてみます。ここでは,Test2::V0のok関数を使って,あるコードによる動作が正しい条件かどうかをテストします。Test2::V0;は省略しますテストを実行すると次の結果が出力され,2つのテストが成功し,コードが意図したとおりに動作していることがわかります。著者プロフィール秋山卓巳(あきやまたくみ)1995年北海道生まれ。2011にて当時高校生としてYAPCスピーカーデビュー。2017年より株式会社はてなに入社後,マンガサービスに携わる。2019」を開催しました。DAY1・DAY2の様子を注目セッションとともにお伝えします。LINEのエンジニア3名がイベントに先駆けて見どころを紹介します。コードの安全性・安定性を高める開発サイクル~テスト管理の効率を上げ,脆弱性診断を自動で行う~本連載では,連載「業務を改善する情報共有の仕掛け」を受けつつ,安全性・安定性を加えた開発サイクルについて考えていきます。若者世代から圧倒的な人気を誇るライブ配信&動画投稿コミュニティアプリ「MixChannel」(ミクチャ)の裏側(レコメンドシステムやサーバサイド開発など)について解説していきます。その他の連載CSS3アニメーションでつくるインターフェイス表現CSS3によるアニメーション表現を紹介していきます。その中でも,幅広い読者に応用してもらえるだろうインターフェイスを主なお題とします。MySQL道普請便り本連載では,MySQLを使ったアプリ開発・運用に関するノウハウをご紹介していきます。RecipeUbuntuの強力なデスクトップ機能を活用するための,いろいろなレシピをお届けします。JavaScriptセキュリティの基礎知識JavaScriptに関するセキュリティ上の問題はどこで発生し,どうすれば防ぐことができるのか?について解説していきます。〜システムをきちんと運用するための基礎知識システムは「作って終わり」ではなく,運用の中でさまざまな問題が発生します。問題の発生に備えて事前にどのような対応をしておくべきなのか,問題発生時に何をしなければならないのか,ポイントを解説していきます。きたみりゅうじの聞かせて珍プレーソフトウェア開発の現場で体験したトホホな失敗,思わずうなる珍プレーをきたみりゅうじ氏が四コママンガで紹介。Linuxのメンテナンスの傍ら,Linuxやオープンソースソフトと日々を過ごす著者が,その魅力とつきあい方を,エッセイ風味でお届けします。PRESS特別編集部員,さわやか笑顔のスーパーハカーはまちちゃんとネット大好き14歳わかばちゃんが,毎号,読者の皆さんから寄せられたおたよりを紹介します。皆さんの日頃の悩みにも答えちゃいますよ。]メールでのお知らせメールで次の案内をお送りしております。メールの配信を希望する方は,利用したい項目をチェックしてメールアドレスを入力し,[登録]ボタンをクリックしてください。UPDATES[ほぼ週間に1回]新刊メールマガジン[ほぼ週間に1回]電脳会議の各号案内[ほぼ1ヵ月半に1回]※変更する場合や停止する場合は,登録情報変更ページをご覧ください。※登録いただいたメールアドレスには,そのお知らせ以外,配信いたしません。Ltd.ページ内容の全部あるいは一部を無断で利用することを禁止します。個別にライセンスが設定されている記事等はそのライセンスに従います。