如何在CakePHP 2.4中测试库?

时间:2013-11-20 17:37:24

标签: unit-testing cakephp-2.0

我在应用程序中将一些代码从模型移动到了Lib,因为它可以从2个模型中使用,而不是与数据库相关。它是一个上传处理程序,可以从我的两个模型中使用。它位于/app/Lib/UploadHandler.php 这样可行。乌拉...

但是:我怎样才能为我的Lib写单元测试?它是一个lib而不是第三方类,它们属于vendor文件夹。我在一个新文件夹“Lib”中创建了一个TestClass /app/Test/Case/Lib/UploadHandlerTest.php

到目前为止,我所做的是:

App::uses('UploadHandler', 'Lib');

/**
 * UploadHandler Test Case
 *
*/
class UploadHandlerTestCase extends CakeTestCase
{
    /**
     * Fixtures
     *
     * @var array
     */
    public $fixtures = array();

    /**
     * setUp method
     *
     * @return void
    */
    public function setUp() {
        parent::setUp();

        $this->UploadHandler = ClassRegistry::init('UploadHandler');
    }

    /**
     * tearDown method
     *
     * @return void
     */
    public function tearDown() {
        unset($this->UploadHandler);

        parent::tearDown();
    }




    public function testHandleFileUpload() {....

这给我的错误如下: MissingTableException 在数据源测试中找不到模型UploadHandler的表sang_upload_handlers。 测试用例:UploadHandlerTestCase(testHandleFileUpload)

但是 - 嘿,我不需要数据库!我的所有方法都只运行我提供公共方法的数据。

我的测试类的正确初始化是什么?

感谢您的帮助!

Calamity Jane

1 个答案:

答案 0 :(得分:0)

所以如果除了我之外的任何人都对它感兴趣,我找到了一种方法让它像我想要的那样工作。

首先是文件夹结构:

班级位置:

app / Lib / MyLib.php

测试类位置:

应用/测试/外壳/ LIB / MyLibTest.php

通过这个,你可以在CakePHP浏览器web界面中看到你的库的测试。

第二:如何防止有关dabase表的错误。 答案很简单:只是让你的testclass扩展而不是CakeTestCase,但是使用原始的PHPUnit_Framework_TestCase,你就可以毫不费力地丢失表格。

...咄

示例:

require_once DS.'var'.DS.'www'.DS.'myproject'.DS.APP_DIR.DS.'/Lib/UploadHandler.php';

/**
 * UploadHandler Test Case
 *
*/
class UploadHandlerTestCase extends PHPUnit_Framework_TestCase
{....

我很乐意帮助自己;)我想在今年的变化中有很多睡眠可以解决问题;)

Calamity Jane