У меня проблема. У меня есть черта с провайдером данных:
trait testingData{
protected function dataProvider(){
return[['example' => 1],
['example' => 2];
}
protected function testData(MyTester $I, Example $e){
$I->testData($e['example'];
}
}
У меня много таких черт.
Тогда у меня есть один большой класс, который объединяет эти черты
class Importer{
use "namespace of testingData trait";
//setters, getters, some parameters...
use testingData;
/**
* @dataProvider dataProvider
*/
public startTest(MyTester $I, Example $e){
$this->testData($I,$e);
}
/**
* @dataProvider anotherDataProvider
*/
public startAnotherTest(MyTester $I, Example $e){
$this->testAnotherData($I,$e);
}
}
И теперь в моем тесте я пытаюсь вызвать эти два теста с аннотацией @after, test расширяет класс импортера, поэтому он выглядит следующим образом:
class test extends Importer{
/**
* @after startTest
* @after startAnotherTest
*/
public function prepareForm(FormTester $I, Example $e){
$I->amOnPage("/somewhere");
...
}
}
Итак, в чем проблема?
Я должен описать вам шаги теста:
- start prepareForm - нормально
- start @after startTest - первая строка
- fail потому что он начался @after startAnotherTest и он использует другой dataProvider с разными data и dataKeys
Какие шаги мне нужны:
- start prepareForm - ok
- start @after startTest - первая строка
- start @after startTest - вторая строка
- start @after startAnotherTest - первая строка (другой поставщик данных) ...
Что я попробовал?
Я попробовал в классе Importer в конструкторе создания e $ this-> myDataProvider = new Example (dataProvider); и отправьте в метод testData ($ I, $ this-> myDataProvider [0]). Но здесь я могу использовать только одну указанную c строку dataProvider.
Это вообще возможно?
спасибо за ответы