分(1)はこちら,(⁠2)はこちらから。テスト関数の作り方テストが大きくなってくると,複数のテスト間で共通して使えるテストの処理を1つの関数としてまとめたくなります。本節ではテスト関数の作成とそのテストの方法について解説します。関数の中で通常と同じようにテスト関数を呼ぶようにしてみます。――(2)この場合に問題となるのが,呼び出し元をテスト側に反映できないという点です。テストを実行して,失敗したときの出力を見てみます。(2)で失敗すると思われるテストは(1)(5行目)で失敗したことになっており,これではテスト結果がわかりにくいです。+------+--------------+----+---------------+------+この問題を解決するためには,isやokなどのテスト関数の1つ上の呼び出し元が反映されるように伝える必要があります。Test::Builderの場合は$Test::Builder::Levelというグローバル変数によって管理する必要がありましたが,Test2ではコンテキストと呼ばれるオブジェクトに隠蔽(いんぺい)されています。スコープの変更時にcontext関数を呼び出すことでコンテキストを作り,抜けるときに作成したコンテキストのreleaseメソッドを呼び出します。することで,テスト関数の呼び出し元を正しく反映できます。$ctx->release;}テスト関数のテストテスト関数を書いたなら,その関数が正しいかどうかテストを書きたくなるはずです。Test2では,テストの結果をイベントと呼ばれる単位で取り出すことで,容易にテスト関数のテストができるようになっています。イベントはあるテストが成功したことや出力されたといった単位を表し,表4のようにいくつかの種類があります。subtest関数によりsubtest化されたテスト,subtest内で発行されたイベントはsubeventsに含まれるイベントの取り出しイベントの取り出しには,intercept関数を使います。コードブロック内で実行されたテストは実際には結果としては出力されず,イベントとして扱えます。取り出したイベントを比較して,テスト関数が正しく動いていることをテストできます。イベントの比較には,eventビルダを使いチェックします。次のコードでは,失敗するテストを例に,イベントを取り出して出力結果が意図したとおりかどうかをテストしています。┛(1)では,イベントを取り出す対象となるテスト関数を呼び出しています。(2)では,eventビルダにより,Okイベントが発行されていてその結果が失敗していることをチェックしています。(3)では,出力結果のテーブルを比較しています。message自体は文字列であるため,Test2::Util::Tableにあるテーブルを作るヘルパを利用しています。Test2::Tools::EventDumperを使うことで,イベントからテストコードを生成できます。テストを書き始める際に使うと全体的なイベントの流れが理解しやすくなるでしょう。テストモジュールの一例ここでテストモジュールの一例として,筆者が開発したTest2::Tools::JSONというモジュールを紹介します。このモジュールは,JSONの文字列をテスト内で比較できるようにしたもので,Test::Deep::JSONをTest2用に書きなおしたものです。使い方は,次のようにTest2::Tools::JSONがエクスポートするjson関数を使うことで,データ構造に含まれるJSONの文字列に対して比較を行えます。E}),};上記のテスト中のJSONを{"a":2}と書き換えて失敗させてみます。図2のように,出力結果をJSON向けにカスタマイズできるところがTest2の便利なところです。+-----------------------+---------+------+-------------+-----+まとめ本稿では,新たなテスティングフレームワークであるTest2を使ったテストの方法について解説しました。Test2では,Test::Builderの問題を解決し,Test2::V0といった高機能なテストモジュールが使え,さらに従来のモジュールと比べるとテスト関数のテストが柔軟に行えます。本稿で紹介したものは一部にすぎません。RSpecライクなテスト記法を提供するTest2::Workflowや,proveを置き換える形のテストランナーであるyathなど,Test2に関連する新たなツールが開発されています。みなさんも,これからテストを書く際はTest2を使ってみてください。次回の執筆者は小林謙太さんで,テーマは「Perlで堅牢な開発」です。著者プロフィール秋山卓巳(あきやまたくみ)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.ページ内容の全部あるいは一部を無断で利用することを禁止します。個別にライセンスが設定されている記事等はそのライセンスに従います。