Есть ли способ вызвать разрыв после завершения каждого поставщика данных в PHPUnit? - PullRequest
0 голосов
/ 26 октября 2019

У меня есть тест, который запускается из нескольких @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;}],
    ];
}
...