Prev Next

第9章 データベースのテスト

作成中のソフトウェアのテストを書いているうちに、 データベースに関するコードをテストする必要が出てくることもあるでしょう。 データベース拡張を使用すると、 データベースを特定の状態にしてからデータベース関連のコードを実行し、 データベースのデータが期待通りになっているかどうかを確かめることができます。

データベース関連のユニットテストを作成するもっとも手っ取り早い方法は、 PHPUnit_Extensions_Database_TestCase クラスを継承することです。 このクラスには、データベース接続を作成したり データベースにデータを送信したり、 テストの実行後にデータベースの中身を様々な形式のデータセットと比較したりする機能があります。 例 9.1 に、getConnection()getDataSet() の実装例を示します。

例 9.1: データベーステストケースの準備

<?php
require_once 'PHPUnit/Extensions/Database/TestCase.php';

class DatabaseTest extends PHPUnit_Extensions_Database_TestCase
{
protected function getConnection()
{
$pdo = new PDO('mysql:host=localhost;dbname=testdb', 'root', '');
return $this->createDefaultDBConnection($pdo, 'testdb');
}

protected function getDataSet()
{
return $this->createFlatXMLDataSet(dirname(__FILE__).'/_files/bank-account-seed.xml');
}
}
?>

getConnection() メソッドは、 PHPUnit_Extensions_Database_DB_IDatabaseConnection インターフェイスの実装を返す必要があります。 createDefaultDBConnection() メソッドを使用して、データベース接続を返すことができます。 このメソッドの最初のパラメータには PDO オブジェクトを渡し、2 番目のパラメータにはテスト対象のスキーマの名前を渡します。

getDataSet() メソッドは、 PHPUnit_Extensions_Database_DataSet_IDataSet インターフェイスの実装を返す必要があります。 現在、PHPUnit では 3 種類のデータセットが使用できます。 データセットについては 「データセット」 で説明します。

表9.1 データベーステストケースのメソッド

メソッド 意味
PHPUnit_Extensions_Database_DB_IDatabaseConnection getConnection() データベース接続を返すように実装します。これを用いて、期待するデータセットやテーブルを調べます。
PHPUnit_Extensions_Database_DataSet_IDataSet getDataSet() データセットを返すように実装します。データベースの初期設定 (setup) や後始末 (teardown) の際にこれを使用します。
PHPUnit_Extensions_Database_Operation_DatabaseOperation getSetUpOperation() オーバーライドして、各テストの最初に実行する特定の操作を返すようにします。操作の詳細については 「操作」 を参照ください。
PHPUnit_Extensions_Database_Operation_DatabaseOperation getTearDownOperation() オーバーライドして、各テストの最後に実行する特定の操作を返すようにします。操作の詳細については 「操作」 を参照ください。
PHPUnit_Extensions_Database_DB_DefaultDatabaseConnection createDefaultDBConnection(PDO $connection, string $schema) $connection PDO オブジェクトのデータベース接続ラッパーを返します。テスト対象のデータベーススキーマを $schema で指定します。このメソッドの結果を getConnection() の返り値として使用することができます。
PHPUnit_Extensions_Database_DataSet_FlatXmlDataSet createFlatXMLDataSet(string $xmlFile) $xmlFile で指定した絶対パスにある xml ファイルから作成したフラット xml データセットを返します。xml ファイルについての詳細は 「Flat XML データセット」 を参照ください。このメソッドの結果を getDataSet() の返り値として使用することができます。
PHPUnit_Extensions_Database_DataSet_XmlDataSet createXMLDataSet(string $xmlFile) $xmlFile で指定した絶対パスにある xml ファイルから作成した xml データセットを返します。xml ファイルについての詳細は 「XML データセット」 を参照ください。このメソッドの結果を getDataSet() の返り値として使用することができます。
void assertTablesEqual(PHPUnit_Extensions_Database_DataSet_ITable $expected, PHPUnit_Extensions_Database_DataSet_ITable $actual) $expected テーブルの内容が $actual テーブルの内容と一致しないときにエラーを報告します。
void assertDataSetsEqual(PHPUnit_Extensions_Database_DataSet_IDataSet $expected, PHPUnit_Extensions_Database_DataSet_IDataSet $actual) $expected データセットの内容が $actual データセットの内容と一致しないときにエラーを報告します。

データセット

...

Flat XML データセット

...

XML データセット

...

操作

...

データベースのテストのコツ

...

Prev Next
1. 自動テスト
2. PHPUnit の目標
3. PHPUnit のインストール
4. PHPUnit 用のテストの書き方
データプロバイダ
例外のテスト
PHP のエラーのテスト
5. コマンドラインのテストランナー
6. Fixtures
tearDown() よりも setUp()
バリエーション
Fixture の共有
7. テストの構成
スイートレベルのセットアップ
8. テストケースの拡張
出力内容のテスト
パフォーマンス低下のテスト
9. データベースのテスト
データセット
Flat XML データセット
XML データセット
操作
データベースのテストのコツ
10. 不完全なテスト・テストの省略
不完全なテスト
テストの省略
11. モックオブジェクト
自己シャント
スタブ
12. テストの進め方
開発中のテスト
デバッグ中のテスト
13. テストファーストプログラミング
銀行口座の例
14. コードカバレッジ解析
カバーするメソッドの指定
コードブロックの無視
ファイルのインクルードや除外
15. テストのその他の使用法
アジャイルな文書作成
複数チームでのテスト
16. ログ出力
XML 形式
コードカバレッジ (XML)
JavaScript Object Notation (JSON)
Test Anything Protocol (TAP)
GraphViz マークアップ
テストデータベース
17. 雛形ジェネレータ
アノテーション
18. PHPUnit と Selenium
Selenium RC
PHPUnit_Extensions_SeleniumTestCase
19. 継続的インテグレーション
CruiseControl
phpUnderControl
Apache Maven
20. PHPUnit の実装
21. PHPUnit API
概要
PHPUnit_Framework_Assert
PHPUnit_Framework_Test
PHPUnit_Framework_TestCase
PHPUnit_Framework_TestSuite
PHPUnit_Framework_TestResult
パッケージの構成
22. PHPUnit の拡張
PHPUnit_Framework_TestCase のサブクラスの作成
アサートクラスの作成
PHPUnit_Extensions_TestDecorator のサブクラスの作成
PHPUnit_Framework_Test の実装
PHPUnit_Framework_TestResult のサブクラスの作成
PHPUnit_Framework_TestListener の実装
新しいテストランナーの作成
A. アサーション
B. XML 設定ファイル
テストスイート
グループ
コードカバレッジ対象のファイルの追加や除外
ログ出力
PMD ルール
PHP INI 項目やグローバル変数の設定
C. PHP 4 用の PHPUnit
D. 目次
E. 参考文献
F. 著作権