cakephp单元测试模型,夹具问题

时间:2009-12-11 01:13:34

标签: unit-testing cakephp tdd cakephp-1.2

所以我正在使用CakePHP v1.2.5。在我目前的项目中,我决定在编写功能时开始编写测试(yay TDD)。我在夹具加载方面遇到了麻烦。

为了帮助完成这个过程,我将描述我的代码(现在非常简单)。我的模型定义如此

// app/models/newsitem.php
<?php
class NewsItem extends AppModel
{
  var $name='NewsItem';
}
?>

// app/tests/fixtures/newsitem_fixture.php
<?php

class NewsItemFixture extends CakeTestFixture 
{
    var $name = 'NewsItem';
    var $import = 'NewsItem';

    var $records = array(
        array('id' => '1', 'title' => 'News Item 1', 'body' => 'This is the first piece of news', 'created' => '2007-03-18 10:39:23', 'modified' => '2007-03-18 10:41:31'),
        array('id' => '2', 'title' => 'News 2', 'body' => 'This is some other piece of news', 'created' => '2009-05-04 9:00:00', 'modified' => '2009-05-05 12:34:56')
    );
}

?>

// app/tests/models/newsitem.test.php
<?php
App::Import('Model', 'NewsItem');

class NewsItemTestCase extends CakeTestCase
{
    var $fixtures = array('app.newsitem');

    function setUp()
    {
        $this->NewsItem =& ClassRegistry::init('NewsItem');
    }

    function testFindAll()
    {
        $results = $this->NewsItem->findAll();
        $expected = array(
            array('NewsItem' => array('id' => '1', 'title' => 'News Item 1', 'body' => 'This is the first piece of news', 'created' => '2007-03-18 10:39:23', 'modified' => '2007-03-18 10:41:31')),
            array('NewsItem' => array('id' => '2', 'title' => 'News 2', 'body' => 'This is some other piece of news', 'created' => '2009-05-04 9:00:00', 'modified' => '2009-05-05 12:34:56'))
        );
        print_r($results);
        $this->assertEqual($results, $expected);
    }   
}

?>

无论如何,我的问题是,当我在浏览器中运行测试套件(转到http://localhost/test.php)时,测试用例运行器尝试加载我的应用程序的布局(这很奇怪因为我只是在测试模型)它引用了另一个显然没有加载到测试数据库中的模型,我得到一个错误。

如果我删除了 来自我的NewsItemTestCase文件的var $fixtures = array('app.newsitem')行,测试用例正常运行,但它没有加载灯具(原因很明显)。

有什么想法,建议吗?说实话,我在这个问题上找到3个以上的教程有点麻烦。

1 个答案:

答案 0 :(得分:2)

这很久以前但是问题是命名约定,如果fixture被称为'NewsItemFixture',那么文件应该是news_item_fixture,而不是newsitem_fixture。如果你想要名为newsitem_fixture的文件,fixture类应该是NewsitemFixture。

同样适用于所有其他文件,例如您所拥有的模型。