PHP Codeceptionテスト入門の入門

Published: 2017年6月25日 by tomsato

Codeceptionとは

PHPのテストを簡単に行うためのテスティングフレームワーク
単体テスト、機能テスト、受け入れテストの3種類のテストを簡単に書くことができる

公式ドキュメントも日本語で読めるので敷居が低い
Codeception.docs.ja
しかしそれでも敷居が高い人や、使ってはいるけどあんまり理解していない人向けに簡潔にまとめていくこととする

Codeceptionはテストの実行環境としてPHPUnitを使用しているので、今まで PHPUnitを使っているテストでも、Codeceptionに移行するのは容易である。またテストを実行するためにPHPUnitを別途インストールする必要はない

実際にプロジェクトにCodeceptionを追加する話は次回としている

プロジェクトにCodeceptionテストをゼロから追加する

単体テスト・機能テスト・受け入れテスト

Codeceptionでは3つのテストを実装できる

受け入れテスト

作成したシステムを納品する際に、要求した機能や性能などを備えているかどうかを確認するためのテスト

ブラウザを開いてページが開けるか、リンクをクリックしたりフォームを操作したり、コンテンツの中身を確認したりなど、ユーザー視点によるアプリケーションのテスト(ユーザーシナリオ)を書いていくことになる

長所

  • ユーザーシナリオなので、技術者ではないマネージャーに見せることができる
  • DBやその他アプリケーションに関わるプラットフォーム全てが関わる総合的なテストなので本番に近いテストができる

短所

  • 動作が遅い、単体テスト、機能テストよりもとても遅い
  • 書いてあるテストしかチェックしないので、人間が見た時には気づける表示部分のバグが気づけない

機能テスト

受け入れテストとほぼ同様なテストが書けるが、機能テストではWebサーバーを立ててアプリケーションを動かす必要がない

これはウェブリクエストをエミュレートしてHTMLレスポンスを返すアプリケーションに送信している

長所

  • 受け入れテストに似ているがWebサーバーを通さないので受け入れテストよりは高速
  • 内部処理をリファクタリングしても最終的なレスポンスが変わらなければテストを修正する手間がかからない

短所

  • JavaScriptやajaxなど動的なページはテストできない
  • この仕組みは有名なフレームワークとのコネクタを使って実現しているため、アプリケーションはフレームワークが使われている必要がある
    • Symfony
    • Laravel5
    • Yii2
    • Yii
    • Zend Framework 2
    • Zend Framework 1.x
      Phalcon
    • Slim(別途モジュールの追加が必要)
  • Codeceptionとアプリケーションを同時に実行できる環境が必要になる

単体テスト(ユニットテスト)

自分たちが書いたプログラムに対するテストのこと
クラスや関数などを単体でテストを行う

長所

  • テスト実行速度が早い
  • 普段使われないような機能もテストできる
  • モックを使うことでDB(や他プラットフォーム)を実際に繋がなくても取得した結果を仮定してテストを行うことができる

短所

  • 少しの修正(関数の引数を変える、戻り値の形式を変えるなど)でテストが通らなくなりテストの管理コストがかかる

とりあえず使ってみる

検証環境

$ php -v
PHP 5.6.30 (cli) (built: Jan 19 2017 08:09:42)

$ cat /etc/redhat-release
CentOS release 6.8 (Final)

ソースコード準備

$ git clone https://github.com/tomsato/codeception_test
$ cd codeception_test
$ composer install

サンプルを動かす

$ sudo php -S 0.0.0.0:80 -t public public/index.php

この状態で「http://localhost:80/hoge/test」にアクセスすると
「Home testtttt.」が表示される(この辺りは適当)

テスト実行

以下のコマンドでは受け入れテスト、機能テスト、単体テスト全てを実行する
(受け入れテストのテストコードは用意していない)

$ ./vendor/bin/codecept run

実行結果

その他の実行方法

// 受け入れテストだけ実行
$ ./vendor/bin/codecept run acceptance

// 機能テストだけ実行
$ ./vendor/bin/codecept run functional

// 単体テストだけ実行
$ ./vendor/bin/codecept run unit

// テストファイルを指定して実行する
$ ./vendor/bin/codecept run unit tests/unit/SampleAppTest.php

Share

最近の投稿

NetlifyのSplit TestingとFunctionsについて使い方をまとめる Split TestingはGitHubのブランチをベースにしたA/Bテストを行うための機能のことで、FunctionsはNetlifyでAWS Lambdaを使うことができる

NetlifyとはHTMLなどの静的コンテンツのみで構成されたWebサイトを閲覧できる形で配信するWebサービス GitHubやBitbucket、GitLabなどと連携して使うことができて、リポジトリにプッシュすることで自動でCI/CDを行うことができる、無料枠が豊富で独自ドメインを設定可能

WordPressからJekyll(GitHub Pages)に移行した手順をまとめる。 お金的な事情や使いやすさなどの理由で無料のJekyll+GitHub Pagesに移行した。JekyllとはMarkdown等から静的ページを生成する静的サイトジェネレータ

Scala開発のためにScalaらしさをまとめる 言語設計者の設計思想を元にScalaらしさについてまとめる オブジェクト指向と関数型の融合について

StorybookとはUI開発環境を提供するツール React、React Native、Angular、Vueなどをサポートしている ユーザーは独立した開発環境でコンポーネントを個別に作成して挙動の確認をテストできたり、コンポーネントを一覧にしてカタログ化できるので他の人に紹介する時に使えたりする

カテゴリ一覧

タグ一覧