PHPUnit провайдер данных динамически создает

У меня очень интересный вопрос о поставщиках данных PHPUnit.

protected $controller;

protected function setUp()
{
$this->controller = new ProductController();
}

/**
* @covers       ProductsController::createItem
* @dataProvider getTestDataProvider
* @param number $name
*/
public function testCreateItem($name)
{
$prod = $this->controller->createItem($name);
$id = $prod->getId;
$this->assertInternalType('int', $id);
$this->assertInstanceOf('Product', $prod);
}

/**
* @covers           ProductsController::getItemInfo
* @depends          testCreateItem
* @param number $id
*/
public function testGetItemInfo($id)
{
$info = $this->controller->getItemInfo($id);
$this->assertArrayHasKey('id',$info);
$this->assertEquals($id, $info['id']);
}

я использую getTestDataProvider получить тестовые данные из файла CSV. затем testCreateItem создать 10 новых продуктов из рядов CSV.

Как я могу создать массив $id новых продуктов и использовать его в качестве поставщика данных для testGetItemInfo? Я не могу сохранить его в SESSION или файле, потому что функции провайдера выполняются до SetUp.

Может быть, кто-то уже сталкивался с подобной проблемой?

2

Решение

У меня есть только идея со статическим полем (возможно, не лучшим, но если у кого-то получше, я посмотрю).

private static $ids;

/**
* @dataProvider some
*/
public function testT1($id)
{
self::$ids[] = $id;
}

/**
* @depends testT1
*/
public function testT2()
{
var_dump(self::$ids);
}

public function some()
{
return [
[1],
[2],
[3]
];
}

Вы должны помнить, что это поле видно во всех классах, поэтому, если вы хотите использовать другой набор данных, вы должны аннулировать это поле.

0

Другие решения

Других решений пока нет …