У меня есть тест, который запускается из нескольких @dataproviders, и я хотел бы выполнить некоторую очистку статических классов, которые используются в каждой последовательности от провайдеров данных, но не должны сохраняться между ними.
Я могуфальсифицируйте это так, добавив параметр, который запускает очистку и пропускает тест-кейс. Но это кажется хакерским, так что мне интересно, как запустить «демонтаж пост-провайдера данных» после того, как каждый провайдер данных завершит свою последовательность? Я не вижу ничего в документации .
/**
* @dataprovider dp1
* @dataprovider dp2
* @dataprovider dp3
*/
public function mytest($some, $data, $cleanup){
if($cleanup) static::$sut = null;
if(!static::$sut) static::$sut = new SUT(); // init or re-init
// do test ...
}
public function dp1(){
return [
["some1", "data1", false],
["some2", "data2", false],
["some3", "data3", true],
];
}
public function dp2(){
return [
["some10", "data10", false],
["some20", "data20", false],
["some30", "data30", true],
];
}
Я также подумал о том, чтобы добавить в DP необязательный параметр замыкания, чтобы "делать вещи" на каждой итерации, что по крайней мере перемещаетлогика настройки / разрыва из класса тестирования и в «слой» данных. Но это все еще не кажется идиоматическим.
public function mytest($some, $data, $dostuff){
if($dostuff) $dostuff();
// do test ...
}
public function dp1(){
return [
["some1", "data1", function(){static::$sut = new SUT(); }],
["some2", "data2", null],
["some3", "data3", null],
["some4", "data4", null],
["some5", "data5", function(){static::$sut = null;}],
];
}