Noteビジネスチャット「Chatwork」のエンジニアとデザイナーのブログです。ビジネスチャット「Chatwork」のエンジニアとデザイナーのブログです。Calendarプロダクト開発部の田中(@cw-tanaka)です。現在PHPerとして生きています。APIを実行して学ぶRustでした。今日はPHPの話をします。ChatWorkは来年で7周年を迎え、Webサービスの中でも寿命は長い方なのではないかなと思ってます。そんな歴史のあるChatWorkですが、コード規模もかなり膨れ上がってきており、それにともなってユニットテストの規模もどんどん大きくなってきました。弊社は基本的なビジネスロジックの部分はユニットテストを書くようにしており、現在では6000ケース近くのテストをCIで走らせています。(これ以外にもE2Eテスト等もあるため、総数はもっと多くなってます)今回、弊社なりのPHPのユニットテストの書き方を紹介したいと思います。以下、テストフレームワークはPHPUnitが前提です。}基本的にPHPUnitはメソッド名の最初がtestであるものをさがし、それをテストとして実行します。これは、以下のような@testアノテーションを使っても表現できます。}また、PHPはメソッド名を日本語でも表現できるため、以下のように書くことも可能です。}弊社では上記の日本語メソッドの書き方を採用しています。上記に加えてテスト対象を明示するため、メソッド名のprefixにテスト対象のメソッド名を付与しています。}日本語のテストケースのメリット・デメリットについて日本語でユニットテストを書くことについては賛否両論あると思ってます。そこで、メリット・デメリットについてまとめてみました。弊社ではデメリットよりもメリットによる利益の方が上回ると判断し、このような書き方となっています。dataProviderを積極的に使う渡された値が数値かどうかを検証するメソッドをテストしたいとしましょう。}上記は「数値かどうか」というテストに対して、「1は数値である」というテストしか網羅できていません。閾値チェックとして、マイナス値、0、PHPのINT最大値、最小値等の値もチェックしたくなります。}こういった、テストデータは違うのだけれど、テストコード自体が同じ場合はPHPUnitのdataProviderの機能を使います。そのメソッドで返される値がテストケースの引数にわたされます。それぞれのテストデータについて、名前がつけられるので、基本はつけておくようにします。}たとえば上記であるテストデータで失敗した場合、以下のようにどのテストデータで失敗したかがわかりやすく表示されます。下記は、あえて失敗するテストデータを追加した状態でテストを実行した結果です。1.サンプルのソースコードを置いておきますので、何かの参考になれば。github.comとりあえず今日はこんなところで。PHP部の山下(@task2021)です。この度...2021-05-06ESLintの設定値が期待した値になっているか確認するテストマッチャーを作ろうこんにちは。開発部のcw-sayamaです。前回の投...2021-02-12ESLintの設定をスナップショットテストしてみよう初めまして。〜PHPアプリケーシ...こんにちは!SRE部のcw-ozakiです。@Chatwork_devメンバーid:cw-oritaid:okuzawatsid:d-hayashiid:shibe23id:cw-jeromechaid:cw-araiid:tinpayid:cw-sakamotoid:rabe1028id:cw-suetakeid:lmdexprid:cw-shinyaid:cw-takaseid:cw-niinumaid:j5ik2oid:tan-yukiid:yamakenji24id:yoshiyoshifujiiid:cw-ayumitakahashiid:cw-furuyaid:kaz3284id:cw-ozakiid:cw-nishikawaid:daiksyid:tasuku43id:louvre2489id:sykt13id:yamatomo73id:cw-kasugaid:cw-mottyid:cw-nishiguchiid:s12btid:cw-sayamaid:cw-moriyaid:cw-makotoikedaid:cw-yoheihayashiid:wakakumaid:cw-sakaguchiid:cw-matsubaid:ymgnid:shige0501id:nottegraid:shinharadid:eielid:cw-michihiroid:crossroad0201id:cw-miyashitaid:agoetcid:at-akaid:cw-chibaid:tenslerid:cw-akatsuid:cw-kajiwaraid:cw-otakeid:TomokoNishinaid:cw-tanakaid:cw-hayashiid:cw-marikoid:cw-shinmenid:cw-masakiid:cw-hayama最新記事モバイルアプリ開発チーム、カンバンはじめました。(1)引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。