我有一个在cakephp中开发的网站,其中包含一个我想用PHPUnit测试的组件。
我创建了一个名为CurrencyConverter的插件,我在其中放入了一个组件:
Plugin/CurrencyConverter/Controller/Component/CurrencyConverterComponent.php
现在我想测试我的代码。
我已将文件CurrencyConverterTest.php创建为:
Test/Case/Controller/Component/CurrencyConverterTest.php
这是测试文件:
<?php
class CurrencyConverterTestCase extends CakeTestCase {
var $uses = null;
public $CurrencyConverter;
function testConverter() {
$this->CurrencyConverter = ClassRegistry::init('CurrencyConverterComponent');
$price = $this->CurrencyConverter->convert('EUR', 'EUR', '1000', 0, 0);
echo($price);
}
}
?>
如果我运行测试,则返回此错误:
MISSINGTABLEEXCEPTION
Table currency_converter_components for model CurrencyConverterComponent was not found in datasource test.
Test case: CurrencyConverterTestCase(testConverter)
在我的组件中,现在还没有调用数据库,如何告诉测试不要使用模型?
或者我必须创建一个?
有人可以解释我如何在不使用数据库的情况下测试组件吗?
由于
答案 0 :(得分:0)
那是错的:
ClassRegistry::init('CurrencyConverterComponent');
被认为是加载模型,它使用给定的名称动态构建模型,按照惯例,它会查找该表currency_converter_components。
我建议您查看CakePHP核心测试,例如AuthComponent测试作为如何在测试中实例化组件的示例。
$request = new CakeRequest(null, false);
$this->Controller = new AuthTestController($request, $this->getMock('CakeResponse'));
$collection = new ComponentCollection();
$collection->init($this->Controller);
$this->Auth = new TestAuthComponent($collection);
您的测试也缺少setUp()和tearDown()。这看起来并不像您已阅读有关测试的文档。 http://book.cakephp.org/2.0/en/development/testing.html#creating-your-first-test-case
为什么CurrencyConverter仍然是一个组件?它处理数据,这显然应该是模型方法或行为。此外,您在方法和属性前面缺少关键字。