V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
salamanderMH
V2EX  ›  问与答

PHP 单元测试使用 mysqldump 的 xml,表的字段信息可以用吗?

  •  
  •   salamanderMH · 2018-11-29 12:03:47 +08:00 · 684 次点击
    这是一个创建于 2194 天前的主题,其中的信息可能已经有所发展或是发生改变。

    DbUnit

    看了 PHPUnit 写数据库测试的文档,要先建立基境,主要是写个 setup 函数,这是我的

    protected function setUp() : void
    {
        //获取 mysql 连接
        $conn = $this->getConnection();
        //建立 PDO 连接
        $pdo = $conn->getConnection();
        // set up tables
        $fixtureDataSet = $this->getDataSet();
        foreach ($fixtureDataSet->getTableNames() as $table) {
            // drop table
            $pdo->exec("DROP TABLE IF EXISTS `$table`;");
            // recreate table
            //Returns a table meta data object for the given table
            $meta = $fixtureDataSet->getTableMetaData($table);
            $create = "CREATE TABLE IF NOT EXISTS `$table` ";
            $cols = array();
            foreach ($meta->getColumns() as $col) {
                $cols[] = "`$col` VARCHAR(200)";
            }
            $create .= '('.implode(',', $cols).');';
            $pdo->exec($create);
        }
        parent::setUp();
    }
    

    但是这样的话,创建表的字段都是 varchar(200),而我看$meta 这个类getColumns就是返回了一个字符串数组,字段定义信息我也不知道从哪里拿?

    这是 MySQLdump 出来的 xml 文件

    <?xml version="1.0"?>
    <mysqldump xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <database name="ucenter">
    	<table_structure name="uc_assets_log">
    		<field Field="id" Type="int(10) unsigned" Null="NO" Key="PRI" Extra="auto_increment" Comment="" />
    		<field Field="uid" Type="int(10)" Null="NO" Key="MUL" Extra="" Comment="收入者" />
    		<field Field="type" Type="tinyint(1) unsigned" Null="NO" Key="" Default="1" Extra="" Comment="1:U 币,2:鲜花" />
    		<field Field="number" Type="decimal(10,2)" Null="NO" Key="" Extra="" Comment="收入金额" />
    		<field Field="charm" Type="float(10,2)" Null="NO" Key="" Default="0.00" Extra="" Comment="该收入所得魅力值" />
    		<field Field="dateline" Type="int(10)" Null="NO" Key="MUL" Extra="" Comment="" />
    		<field Field="buid" Type="int(10)" Null="NO" Key="MUL" Default="0" Extra="" Comment="消费者" />
    		<field Field="pay" Type="decimal(10,2)" Null="NO" Key="" Default="0.00" Extra="" Comment="消费金额" />
    	</table_structure>
    	<table_data name="uc_assets_log">
    	</table_data>
    </database>
    </mysqldump>
    
    
    1 条回复    2018-11-29 12:43:48 +08:00
    iyaozhen
        1
    iyaozhen  
       2018-11-29 12:43:48 +08:00
    个人觉得,没必要在 case 里面创建数据库,可以事先创建好,每次 truncate 就行。getDataSet 应该只是个数据集,没有字段的定义

    自己的一点实践: https://iyaozhen.com/php-unit-test-mock-and-db-test.html
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2585 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 21ms · UTC 05:34 · PVG 13:34 · LAX 21:34 · JFK 00:34
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.