PHPUnit数据库 - 没有这样的表

时间:2013-11-29 13:27:15

标签: php phpunit

我正在尝试使用数据库模拟运行非常简单的PHPUnit测试类。我正在尝试使用一些值创建数据集。我正在使用MySQL XML对象。

我的MySQL XML对象是:

<?xml version="1.0"?>
    <mysqldump xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <database name="some_test_db">
        <table_data name="some_test_table">
        <row>
            <field name="id">1</field>
            <field name="content_time">1382774967</field>
            <field name="ip">10.0.0.10</field>
            <field name="content">test message</field>
        </row>
        </table_data>
    </database>
    </mysqldump>

我在测试类中的PHP代码是:

<?php 

class TestOfDatabase extends PHPUnit_Extensions_Database_TestCase {
    protected $pdo;

    public function __construct() {
        $this->pdo = new PDO('sqlite::memory:');
    }   
      protected function setUp() {
        $this->getConnection()->createDataSet();
    }

     /**
     * @return PHPUnit_Extensions_Database_DB_IDatabaseConnection
     */
    public function getConnection() {
        return $this->createDefaultDBConnection($this->pdo, 'sqlite');
    }

    /**
     * @return PHPUnit_Extensions_Database_DataSet_IDataSet
     */
    public function getDataSet() {
        return $this->createMySQLXMLDataSet(dirname(__FILE__).'/dataset.xml');
    }

    public function testGetInstance() {
      $this->assertGreaterThan(0, $this->getConnection()->getRowCount('some_test_table'));
    }
}

当我运行TestofDatabase时,我得到“常规错误1:没有这样的表:some_test_table”。

我无法理解为什么模拟数据库没有填充我插入到dataset.xml的数据。

我已经检查过路径没问题。

1 个答案:

答案 0 :(得分:1)

您正在使用MySQL的实用程序生成的XML文件。这可能只能重新加载到MySQL数据库中。由于您使用SQLite进行测试,请尝试使用更简单的XML样式作为数据源:http://phpunit.de/manual/3.7/en/database.html#database.xml-dataset

<?xml version="1.0" ?>
<dataset>
    <table name="some_test_table">
        <column>id</column>
        <column>content_time</column>
        <column>ip</column>
        <column>content</column>
        <row>
            <value>1</value>
            <value>1382774967</value>
            <value>10.0.0.10</value>
            <value>test message</value>
        </row>
    </table>
</dataset>