テストとデバッグ

バグの少ない堅牢なアプリケーションを開発するためには、自動テストとデバッグ技術の習得が欠かせません。
特にPHPでは、PHPUnitによるテストと、xdebugを使ったステップ実行・ブレークポイントデバッグが非常に効果的です。

本記事では、PHPUnitの導入とユニットテストの基本モックとスタブの違い実務で役立つデバッグ手法を分かりやすく解説します。


PHPUnitの導入と基本テスト

1. PHPUnitのインストール

Composerを使用してプロジェクトにインストールします。

composer require --dev phpunit/phpunit ^10

インストール後は、./vendor/bin/phpunit でコマンド実行できます。

2. テスト対象クラスの例

// src/Calculator.php 
<?php 
 namespace App; 
 class Calculator { 
  public function add($a, $b) { 
   return $a + $b; 
  } 
 } 
?>

3. テストクラスの作成

// tests/CalculatorTest.php 
<?php 
 use PHPUnit\Framework\TestCase; 
 use App\Calculator; 
 class CalculatorTest extends TestCase { 
  public function testAdd() { 
   $calc = new Calculator(); 
   $this->assertEquals(5, $calc->add(2, 3)); 
  } 
 } 
?>

4. 実行コマンド

./vendor/bin/phpunit tests

テストが通れば「OK」、失敗すれば差分が出力されます。


モックとスタブの違いと使い方

ユニットテストでは、外部依存(DB、APIなど)を置き換えてテストするためにモック(Mock)スタブ(Stub)を使います。

スタブ:決まった戻り値を返す

<?php 
 $stub = $this->createStub(SomeService::class); 
 $stub->method('getData')->willReturn('テストデータ'); 
?>

モック:メソッドの呼び出しを検証する

<?php 
 $mock = $this->createMock(Logger::class); 
 $mock->expects($this->once()) ->method('log') ->with('処理開始'); 
 $mock->log('処理開始'); 
 // テスト対象の中で呼ばれる想定 
?>

スタブ=返す用、モック=監視用と覚えるとよいでしょう。


デバッグテクニック(var_dump / xdebug)

1. var_dump() / print_r()

変数の中身を確認するシンプルな手法です。

<?php 
 $user = ['id' => 1, 'name' => '佐藤']; 
 var_dump($user); 
?>

<pre>タグと併用すると整形されて見やすくなります。

2. xdebugによるステップデバッグ

xdebugは、PHPの実行をステップごとに追える強力な拡張モジュールです。

xdebugのインストール(Linux例)

sudo apt install php-xdebug

php.ini に以下を追加

[xdebug] zend_extension=xdebug.so xdebug.mode=debug xdebug.start_with_request=yes

VSCode + PHP Debug 拡張と併用

  • .vscode/launch.jsonでブレークポイント設定
  • F5でステップ実行可能に

正確な変数の状態、実行の流れを可視化でき、バグの特定が一気に楽になります。


まとめ

今回は、PHPにおける自動テストとデバッグ技術を学びました:

  • PHPUnit: テスト駆動で品質管理
  • モック / スタブ: 外部依存を切り離す
  • デバッグ技術: var_dump, xdebug による可視化

これらの技術を組み合わせれば、テストしやすく、バグの少ない堅牢なシステム開発が可能になります。

採用情報 長谷川 横バージョン
SHARE
PHP Code Snippets Powered By : XYZScripts.com