CakeTestCase
(PHPUnitを使用)を拡張し、テスト間でフィクスチャをリロードすることを防ぐCakePHP 2.0のテストケースを防ぐにはどうしたらいいですか?CakePHPとPHPUnitによるテスト間でフィクスチャが再ロードされないようにする方法
背景: PHPUnitを使用してCakePHP 2.0で作成した一連の統合テストがあります。テストケースクラスを標準CakeTestCase
から拡張しました。この一連のテストでは、データベースからデータを取り込むための一連のフィクスチャ設定があります。もちろん、これらのテストには時間がかかります。基本的に、すべての時間はCakeがテスト間ですべてのフィクスチャをアンロードして再ロードすることから来ています。
すべてのテストは、READのみとして機能します。データベースへの検索呼び出しを発行するだけで、その結果に基づいて一連のクラス相互作用の中で論理をテストしています。実際には、テストは次のように煮詰めることができます:
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
クラスのpublic変数autoFixtures
に、false
に変更すると、それが什器を読み込まないというコメントを見ました。手動でロードする必要があることを示すメモを作成します。しかし、実際に手動でロードする方法に関するドキュメントはありません。
私はこれを設定するために 'public $ fixtures = array(...);'を使わなければならないのですか?CakeTestCaseはそれらの変数にいくつかの魔法を働かせるか、 ? – edorian
はい、この質問は、CakeがPHPUnitでどのように動作するかに非常に特有のものです。 'CakeTestCase'クラスを使うと、' $ fixtures'は全ての 'Fixture'クラスをロードする期待される配列です。その後、すべてをロードするための魔法を実行します。この「魔法」とは、物を手動で読み込む方法を決定するために私がドキュメントを読み込んだり読んだりすることができなかったものです。 –