mbarquin / datapool
PHP DataPool,PHPUnit数据提供者标签的对象数据提供者
Requires
- php: >=5.3
Requires (Dev)
- halleck45/phpmetrics: @stable
- pdepend/pdepend: @stable
- phpunit/phpunit: 4.7.*
This package is not auto-updated.
Last update: 2024-09-14 17:21:29 UTC
README
介绍
此库旨在与PHPUnit工具一起使用。DataPool是一个可迭代的对象,可以被返回到标准@dataprovider标签函数中,或者它可以用来从大数据集中获取特定的数据集。
- 它允许将低权重的索引数组值与测试逻辑分离。
- 它可以根据数据集索引返回特定的数据集。
- 它可以将数据集封装为数组,以避免大参数列表。
安装
您可以通过以下方式安装此组件
- 使用官方Github仓库 (https://github.com/mbarquin/datapool)
- 使用composer : composer require mbarquin/datapool --dev
使用
主要使用目的是通过继承,最终类将只包含一个定义索引和一个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数组进行断言。