facebook twitter hatena line google mixi email

Php/phpunit/dbunit/サンプル

提供: 初心者エンジニアの簡易メモ
移動: 案内検索

サンプル

CREATE TABLE `users` (
 `id` int(11) NOT NULL AUTO_INCREMENT,
 `name` varchar(15) DEFAULT NULL,
 PRIMARY KEY (`id`)
) ENGINE=InnoDB 
  • phpunit.xml(に以下DB設定情報追加
<?xml version="1.0" encoding="UTF-8" ?>
<phpunit>
  <php>
    <var name="DB_DSN" value="mysql:dbname=db1;host=localhost" />
    <var name="DB_USER" value="user1" />
    <var name="DB_PASSWD" value="pass1***" />
    <var name="DB_DBNAME" value="hogehoge" />
  </php>
</phpunit>
  • UsersDaoTest.php
require_once "PHPUnit/Extensions/Database/TestCase.php";
class UsersDaoTest extends PHPUnit_Extensions_Database_TestCase
{
    // PDO のインスタンス生成は、クリーンアップおよびフィクスチャ読み込みのときに一度だけ
    static private $pdo = null;
    // PHPUnit_Extensions_Database_DB_IDatabaseConnection のインスタンス生成は、テストごとに一度だけ
    private $conn = null;
    final public function getConnection()
    {
        if ($this->conn === null) {
            if (self::$pdo == null) {
                self::$pdo = new PDO($GLOBALS['DB_DSN'], $GLOBALS['DB_USER'], $GLOBALS['DB_PASSWD']);
            }
            $this->conn = $this->createDefaultDBConnection(self::$pdo, $GLOBALS['DB_DBNAME']);
        }
        return $this->conn;
    }
    /**
     * @return PHPUnit_Extensions_Database_DataSet_IDataSet
     */
    public function getDataSet()
    {
        return $this->createFlatXMLDataSet(__DIR__.'/_files/users.xml');
    }
    public function testCount()
    {
        $count = 2;
        $this->assertThat($count, $this->equalTo($this->conn->getRowCount('users')), '正しい件数である');
    }
}
  • _files/users.xml
<?xml version="1.0" ?>
<dataset>
    <users id="1" name="joe"  />
    <users id="2" name="nancy" />
</dataset>

phpunitを実行するとxmlで設定したデータにDBのテーブルが初期化される