Как предотвратить тестовый пример CakePHP 2.0, который расширяет CakeTestCase
(использует PHPUnit), от перезагрузки приборов между тестами?
Справочная информация: Существует набор интеграционных тестов, которые мы написали для CakePHP 2.0 с использованием PHPUnit. Мы расширили класс тестовых примеров до стандарта CakeTestCase
. Для этого набора тестов у нас есть несколько настроек для заполнения данных из базы данных. Естественно, эти тесты занимают много времени. В основном, все время идет от разгрузки Cake и повторной загрузки всех приборов между тестами.
Все тесты действуют только для чтения. Мы просто отправляем вызовы find в базу данных и тестируем логику среди набора взаимодействий классов на основе этих результатов. На самом деле, тесты можно свести к:
class ALongRunningTest extends CakeTestCase {
public $fixtures = array('app.class1', 'app.class2', ... 'app.class8');
/**
* @dataProvider provider
* @test
*/
public function checkCompositionLogic($val1, $val2, $val3) {
// internally calls class1 and class3
$data = $this->ModelX->generateComplexStructure($val1);
// internally calls other classes & models, which touch the
// other loaded fixtures
$results = $this->ModelY->checkAllWhichApply($val2, $data);
$this->assertEquals($val3, $results);
}
public function provider() {
return array(
array(stuff, stuff1, stuff2),
array(x_stuff, x_stuff1, x_stuff2),
array(y_stuff, y_stuff1, y_stuff2),
array(z_stuff, z_stuff1, z_stuff2),
array(a_stuff, a_stuff1, a_stuff2),
// More test cases
);
}
}
Я не смог ничего найти о том, как это предотвратить. В классе CakeTestCase
я видел открытую переменную autoFixtures
с комментарием, в которой говорится, что если вы измените ее на false
, она не будет загружать приборы. Это делает заметку о том, что вы должны загрузить их вручную. Однако я не вижу документации о том, как на самом деле загрузить их вручную.