テストコードとは?
プログラムの動作を検証するために書かれるコードのことです!
テストコードのメリット
- バグ検知
- コードに潜むバグの検知を早期に発見できます
- 関数の動作を表現できる
- テストコード自体が関数の使用方法を示すドキュメントになります
- リファクタリングの安全性確保
- 他メンバーがコードを修正する際にもテストが通ることで品質が保証されます
- テストコードが無いとどこまで影響範囲があるのか確認しなければなりません
テストの種類
- 単体(ユニット)テスト
- 関数単位で正しく動作するか確認します
- 例: MVCフレームワークのモデルの関数のテスト
- 結合(インテグレーション)テスト
- 単体テストで確認した関数を組み合わせて連携してテストを行います
- 例: MVCフレームワークのコントローラーのアクションのテスト
- システムテスト
- システム全体が要件通りに動作するかを確認します
- アプリケーションがほぼ完成した段階で実施されます
AAAパターン(Arrange, Act, Assert)とは??
テストコードを書くうえで効率的な手法のひとつにAAAがあります。このパターンは、テストコードを整理し、読みやすく、理解しやすくするための手法のひとつとして使われています。
- Arrange (準備)
- テストの前提条件を設定します。必要なオブジェクトを作成し、初期状態を設定します。
- Act (実行)
- テスト対象のメソッドや関数を実行します。
- Assert (検証)
- 実行結果が期待通りであることを検証します。
ここからは実際にPHPのテストコードを見ていきましょう!
PHPでテストコードを書いてみる⚡
PHPのテストではPHPUnitというテストフレームワークを使用します。
PHPUnitを使用するために必要なComposerのインストールからPHPUnitを使った簡単なテストの実行までの手順を紹介します。
作成していくテスト用のファイル構成はこのような形です。
project/
├── phpUnit/
│ ├── vendor/
│ │ └── bin/
│ │ └── phpunit
│ └── tests/
│ └── CalculatorTest.php
└── Calculator.php
早速必要ライブラリとファイルを作成していきましょう!!
1. Composerのインストール
- Composerの公式サイトからインストーラーをダウンロードします。
- ダウンロードしたインストーラーを実行し、指示に従ってインストールします。
インストール確認
インストールが完了したら、コマンドを実行して、Composerが正しくインストールされているか確認します。
composer --version
2. PHPUnitのインストール
Composerを使ってPHPUnitをインストールします。
composer require --dev phpunit/phpunit
vendorフォルダが作成されてなかにPHPUnitが格納されています!
3. テスト対象となるクラスを作る
projectフォルダにCalculator.phpを作成します。
class Calculator {
public function add($a, $b) {
return $a + $b;
}
}
4. テストクラスの作成
testsフォルダのなかにCalculatorTest.phpを作成します。
testAdd()
のなかにテストコードをAAAにならって書いてみます。
use PHPUnit\Framework\TestCase;
require_once DIR . '/../Calculator.php';
class CalculatorTest extends TestCase {
public function testAdd() {
// Arrange: テストの準備
$calculator = new Calculator();
// Act: 実際の操作
$result = $calculator->add(2, 3);
// Assert: 結果の検証
$this->assertEquals(5, $result);
}
}
5. テストの実行
コマンドでテストを実行します!
vendor/bin/phpunit tests/CalculatorTest.php
このようなテスト結果が表示されます。
# PHPUnitのバージョン
PHPUnit 10.5.30 by Sebastian Bergmann and contributors.
# テストが実行されたPHPのバージョン
Runtime: PHP 8.1.24
# テストが1つ実行され成功しています
1 / 1 (100%)
# テストの実行時間とメモリ使用量
Time: 00:00.006, Memory: 6.00 MB
# 1つのテスト、1つのアサーション(検証)が行われたことを示しています。
OK (1 test, 1 assertion)
まとめ🖊️
ご覧いただきありがとうございました!
業務でテストコードを書く文化が無いため(涙
テストプロジェクトを作ってアウトプットしてみました。
次は実際にDBの値なんかもテストしてみたいと思います。
何か気になる点や、おかしな点ありましたらお気軽にコメントください!