PHPで現在時刻を扱うならChronosを使うとテストが楽ですZennttskch🐘PHPで現在時刻を扱うならChronosを使うとテストが楽です2020/03/21に公開PHPtech!この記事は、2020-03-21に別のブログ媒体に投稿した記事のアーカイブです。ハードコードしてしまうと、テストを実行するタイミングによって処理の内容が変わってしまうため、その処理は実質テスト不可能になってしまいます。いうライブラリが便利なので、簡単にご紹介します。PHPのDateTimeを拡張した機能を提供してくれるライブラリです。具体的には以下のような感じです。実際のコードを見たほうが分かりやすいと思うので、簡単なサンプルコードを書いてみました。https://github.com/ttskch/chronos-sample「明日の日付を表示する」という簡単なアプリです。このアプリのコードを見ながら、Chronosがどう便利なのかを説明していきます。実装したコードが以下です。}}このコードをテストしようと思っても、以下のように「特定の日付にテストを実行しないとパスしない」ようなテストしか書けません。オブジェクトを取得するような設計にしておけば、テストのときだけそのサービスをモックすることで、「現在時刻」を固定した状態でテストできるようになります。}}例えばこんな実装にしておくと(かなり雑ですが)、以下のように現在時刻を固定してテストすることが可能になります。オブジェクトを自作サービスから取得するようにしてテスト時のみモックで差し替えるという方法は、現在時刻に依存した処理を書くときの定石だと思います。現在時刻を取得するためだけにサービスを用意しなければならず、面倒ではありますね。使うだけ)で、テスト時に現在時刻を固定することができます。以外のクラスも用意されていて、それぞれでミュータブル・イミュータブルの性質が違っているので、気をつけて使い分ける必要があります。変更後のオブジェクトが戻り値として返ってくる形になります。この辺、注意していないと思わぬバグを生み出しかねないので、気をつけましょう。CEO←フリーランス←カルテットコミュニケーションズ創業CTO。社外CTO/技術顧問数社。PHPとTypeScript。Symfonyの知見をよくブログに書きます。DMまで✉️詳細はリンク先にてバッジを贈って著者を応援しようバッジを受け取った著者にはZennから現金やAmazonギフトカードが還元されます。CEO←フリーランス←カルテットコミュニケーションズ創業CTO。社外CTO/技術顧問数社。PHPとTypeScript。Symfonyの知見をよくブログに書きます。Proよくある質問LinksX(Twitter)GitHubメディアキットLegal利用規約プライバシーポリシ。