PHPUnitでユニットテスト⑤ データベースをテストする 前編
PHPUnitでデータベースのテスト

PHPUnitでデータベース連携機能のユニットテストを行う方法を紹介します。
本記事で利用するプログラム、テストケースのサンプルは下記よりダウンロード出来ます。
Download
環境: PHPUnit 6.5.14, PHP 7.4.8, mysql Ver 8.0.19
拡張機能 DBUnit

PHPUnitでDBのテストを行うためには、拡張機能であるDBUnitを用意する必要があります。
PHPUnit本体と同様、Composerを使用してDBUnitをプロジェクト内にインストールします。
(注意)PHPUnit本体のバージョンがDBUnit拡張をサポートしている必要があります。
詳細は下記参照
【PHPUnit 9.5】PHP Fatal error: Trait ‘PHPUnitDbUnitTestCaseTrait’ not found
既存のcomposer.jsonにdbunitを追記。
{
"require-dev": {
"phpunit/phpunit": "^5.7|^6.0",
"phpunit/dbunit": ">=1.2"
}
}
コマンド composer updateを実行してライブラリを追加でインストールします。
composer update
これにより、テストケース内からDBをテストするための様々な拡張機能が利用できるようになります。
(SAMPLE)
テスト用DBを作成

今回はMySQLを使用していますが、基本的にどのDB(RDBMS)でもテストの実行方法は同じかと思います。
テスト対象として一つのテーブルbooksを作成する。
(DB作成のSQLはダウンロードサンプル内、database.sqlに用意しています)
+--------+--------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +--------+--------------+------+-----+---------+----------------+ | id | int | NO | PRI | NULL | auto_increment | | title | varchar(100) | YES | | NULL | | | author | varchar(50) | YES | | NULL | | +--------+--------------+------+-----+---------+----------------+
(注意)
ユニットテストで使用するDBは都度データを書き換えるため、開発用で使用しているDBとは別にコピーを用意する必要があります。
テスト対象プログラム
Book.php
<?php
namespace app\src;
class Book
{
protected $db;
public function __construct($db)
{
$this->db = $db;
}
public function insert($title, $author)
{
$sql = "INSERT INTO books (title, author) VALUES (:title, :author)";
$prepare = $this->db->prepare($sql);
$prepare->bindValue(':title', $title, \PDO::PARAM_STR);
$prepare->bindValue(':author', $author, \PDO::PARAM_STR);
$prepare->execute();
}
public function findTitleById($id)
{
$sql = "SELECT title FROM books WHERE id = (:id)";
$prepare = $this->db->prepare($sql);
$prepare->bindValue(':id', $id, \PDO::PARAM_INT);
$prepare->execute();
$result = $prepare->fetch(\PDO::FETCH_ASSOC);
return $result['title'];
}
public function update($title, $author, $id)
{
$sql = "UPDATE books SET title = (:title), author = (:author) WHERE id = (:id)";
$prepare = $this->db->prepare($sql);
$prepare->bindValue(':title', $title, \PDO::PARAM_STR);
$prepare->bindValue(':author', $author, \PDO::PARAM_STR);
$prepare->bindValue(':id', $id, \PDO::PARAM_INT);
$prepare->execute();
}
}次回の記事でテストを作成、実行していきます。


“PHPUnitでユニットテスト⑤ データベースをテストする 前編” に対して1件のコメントがあります。
コメントは受け付けていません。