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件のコメントがあります。
コメントは受け付けていません。