mbarquin/datapool

此包最新版本(V1.0.0)没有可用的许可证信息。

PHP DataPool,PHPUnit数据提供者标签的对象数据提供者

V1.0.0 2015-09-03 10:28 UTC

This package is not auto-updated.

Last update: 2024-09-14 17:21:29 UTC


README

介绍

此库旨在与PHPUnit工具一起使用。DataPool是一个可迭代的对象,可以被返回到标准@dataprovider标签函数中,或者它可以用来从大数据集中获取特定的数据集。

  • 它允许将低权重的索引数组值与测试逻辑分离。
  • 它可以根据数据集索引返回特定的数据集。
  • 它可以将数据集封装为数组,以避免大参数列表。

安装

您可以通过以下方式安装此组件

使用

主要使用目的是通过继承,最终类将只包含一个定义索引和一个dataArray,我们可以将其实例化到我们的测试用例中作为dataprovider或作为普通对象,它将为我们提供预定义的测试用例。

更多使用案例在示例文件 /example/tests/src/exampleContactsModelTest.php 中

自定义dataPool示例

    /**
     * Contacts datapool file for Testing purposes
     */
    class ContactsDataPool extends \DataPool\DataPool
    {

        /**
         * @var array Datapoolm fields definition to be merged with data
         */
        protected $definition = array(
            'name',
            'surname',
            'phone',
            'result'
        );

        /**
         * @var array Datasets array to be merged with definition and returned to tests
         */
        public $dataArray = array(
            'Test1'                  => array('Jack', 'Travis', '555999666', true),
            'Test2'                  => array('Mathew', 'Jones', '555888555', true),
            'Test3.NameSurnameEmpty' => array('', '', '555666555', false),
            'TestCase1.PhoneToLong'  => array('Gregor', 'Jones', '5550005518899', false),
            'TestCase2.NoName'       => array('', 'Lock', '555000559', false)
        );

    }// End ContactsDataPool.

受保护的数组$definition定义为避免在所有定义的数据集中重复数据索引。可以使用此$definition值作为索引返回数据集,我们可以通过函数setReturnIndexes(false|true)设置此行为,默认设置为FALSE。

公共数组$dataArray将包含一个包含所有可能的测试数据集的数组,它可以根据索引进行分类,以允许通过getRowsByIndex($index)函数返回dataArray的较小部分。

###测试文件示例###

namespace Example\tests\src;

class exampleContactsModelTest extends \PHPUnit_Framework_TestCase {

    static private $dataPool = null;

    /**
     * Static instance of ContactsDataPool
     *
     * @return \Example\tests\files\ContactsDataPool
     */
    public function getDataPool() {
        // If not instanciated yet...
        if (is_object(self::$dataPool) === false) {
            self::$dataPool = new \Example\tests\files\ContactsDataPool();
        }
        // Avoid mixing behaviors during tests
        self::$dataPool->setReturnArray(false);
        self::$dataPool->setReturnIndexes(false);

        return self::$dataPool;
    }

函数getDataPool()是一个dataprovider,它设置并返回一个可迭代的对象。它可以在任何常见情况下用作标准@dataprovider函数的返回值,它配置为避免使用任何索引作为通常的PHPUnit dataprovider。

我们设置了

setReturnArray(false)以获取每个数据集值作为不同的测试函数参数。

setReturnIndexes(false)以避免将返回的数据集索引与$definition值(array_combine)关联



    public function getDataPoolAsArray() {
        $dataPool = $this->getDataPool();
        $dataPool->setReturnArray(true);
        $dataPool->setReturnIndexes(true);

        return $dataPool->getRowsByIndex('Case');
    }

函数getDataPoolAsArray()返回之前实例化的dataProvider对象的可迭代数据集。我们只想获取按"Case"索引的测试用例,因此我们必须从函数getRowsByIndex('Case')返回结果数组。

我们更改了

setReturnArray(true)以获取每个数据集字段封装在数组中。

setReturnIndexes(true)以强制将每个返回的数据集与$definition值(array_combine)关联



    /**
     * @dataProvider getDataPoolAsArray
     */
    public function testArrayDataProviderInsert($regData) {
        $contModel = new \Example\src\exampleContactsModel();
        $expected  = $regData['result'];
        unset($regData['result']);

        $result = $contModel->insert($regData);
        if ($result === false) {
            $this->assertEquals($expected, $result);
        } else {
            $this->assertTrue(is_integer($result));
        }
    }

如testArrayDataProviderInsert中所示,在数组中封装数据后,我们可以轻松地对ORM对象进行测试或避免在具有许多数据值的测试中进行大参数列表。



    /**
     * @dataProvider getDataPool
     */
    public function testPureDataProviderInsert($name, $surname, $phone, $expected) {
        $contModel      = new \Example\src\exampleContactsModel();

        $reg['name']    = $name;
        $reg['surname'] = $surname;
        $reg['phone']   = $phone;

        $result = $contModel->insert($reg);
        if ($result === false) {
            $this->assertEquals($expected, $result);
        } else {
            $this->assertTrue(is_integer($result));
        }
    }

}// End exampleContactsModelTest.

函数testPureDataProviderInsert使用ContactsDataPool对象作为常规dataprovider数组进行断言。