Причина, по которой поставщики данных не связаны с потоком настройки тестового набора, заключается в том, что они могут быть определены как методы внешнего класса.Также речь идет о введении данных в тесты.Рассмотрим такой код:
class SampleTest extends PHPUnit_Framework_TestCase
{
public function __construct($name = null, array $data = array(), $dataName = '') {
parent::__construct($name, $data, $dataName);
var_dump('constructed');
}
public static function setUpBeforeClass() {
parent::setUpBeforeClass();
var_dump('beforeClass');
}
public function setUp(){
var_dump('before');
}
/**
* @dataProvider sampleDataProvider
*/
public function testMethod($expected, $actual) {
var_dump('test');
$this->assertEquals($expected, $actual);
}
public function sampleDataProvider() {
var_dump('dataProvider');
return [
[1, 1],
[2, 2],
];
}
}
при его запуске вы заметите, что сначала создается SampleTest
экземпляр, затем вызывается dataProvider, затем создается два экземпляра SampleTest
(один метод тестирования умножается на два набора данных из dataprovider.), затем перед запуском метода Class, затем метод test запускается дважды с введенными наборами данных от поставщика.
Не совсем ясно, каков ваш конкретный вариант использования, но возможно ли реорганизоватьслучай выше в что-то вроде:
class AnotherSampleTest extends PHPUnit_Framework_TestCase
{
public function testMethod() {
foreach ($this->sampleDataProvider() as $dataSet) {
list($expected, $actual) = $dataSet;
$this->assertEquals($expected, $actual);
}
}
public function sampleDataProvider() {
return [
[1, 1],
[2, 2],
];
}
}
здесь sampleDataProvider
- это просто обычный метод, поэтому вы отвечаете, как и когда вызывать его, и в любом случае он вызывается после setUpBeforeClass
и setUp
, поэтомуу него есть доступ к любому материалу, настроенному или измененному там, так что вы можете вносить любые необходимые изменения.
Недостатком такого подхода является то, что вы фактически теряете разбиение одного метода тестирования на несколько.Таким образом, это будет один тест с несколькими утверждениями по сравнению с несколькими тестами с несколькими утверждениями на каждый.Также вам, возможно, придется позаботиться о настройке (я имею в виду, что вам может потребоваться обновить что-то перед каждой итерацией) - это можно решить, вызвав setUp
вручную (на первый взгляд).
Не думайтеМожно сделать любые дальнейшие предложения без каких-либо подробностей вашего конкретного случая использования.