У меня очень интересный вопрос о поставщиках данных 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.
Может быть, кто-то уже сталкивался с подобной проблемой?
У меня есть только идея со статическим полем (возможно, не лучшим, но если у кого-то получше, я посмотрю).
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]
];
}
Вы должны помнить, что это поле видно во всех классах, поэтому, если вы хотите использовать другой набор данных, вы должны аннулировать это поле.
Других решений пока нет …