【发布时间】:2012-01-19 18:45:05
【问题描述】:
如何防止扩展 CakeTestCase(使用 PHPUnit)的 CakePHP 2.0 测试用例在测试之间重新加载夹具?
背景: 我们使用 PHPUnit 用 CakePHP 2.0 编写了一组集成测试。我们从标准CakeTestCase 扩展了测试用例类。对于这组测试,我们设置了一堆固定装置来填充数据库中的数据。自然,这些测试需要很长时间才能运行。基本上,所有时间都来自于 Cake 卸载和重新加载测试之间的所有固定装置。
所有测试都仅作为 READ。我们只是向数据库发出 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,它将不会加载固定装置。它会说明您必须手动加载它们。但是,我没有看到有关如何手动实际加载它们的文档。
【问题讨论】:
-
我对蛋糕一无所知:您是否必须使用
public $fixtures = array(...);来设置它并且 CakeTestCase 对这些变量有一些魔力,或者您是否可以控制夹具的创建? -
是的,这个问题是关于 Cake 如何与 PHPUnit 一起工作的。使用
CakeTestCase类,$fixtures是一个预期的数组,列出了所有要加载的Fixture类。然后它会执行一些魔法来加载所有内容。这种“魔法”是我无法追踪或阅读文档以确定如何手动加载内容的原因。
标签: phpunit cakephp-2.0