将PHPUnit与CakePHP 1.3集成

时间:2011-05-23 10:33:07

标签: unit-testing cakephp phpunit cakephp-1.3

我一直在寻找帮助我将PHPUnit与CakePHP集成的教程。希望使用Selenium测试,所以更喜欢PHPUnit。

我一直在尝试按照http://cakebaker.42dh.com/2006/03/22/selenium/上的教程,但似乎无法使其发挥作用。有什么好的教程吗?

谢谢!

2 个答案:

答案 0 :(得分:5)

相对容易。我从作曲家安装中使用cake 1.3。这就是我的composer.json的样子:

{
    "config": {
        "vendor-dir": "vendors/composer"
    },
    "require": {
        "phpunit/phpunit": "3.7.*",
        "cakephp/cakephp-1.3": "1.3",
    },
    "repositories": [
        {
            "type": "package",
            "package": {
                "name": "cakephp/cakephp-1.3",
                "version": "1.3",
                "source": {
                    "url": "https://github.com/cakephp/cakephp.git",
                    "type": "git",
                    "reference": "1.3"
                }
            }
        }
    ]
}

然后测试目录中的phpunit bootstrap.php文件:

<?php
include('../vendors/composer/autoload.php');
include('../webroot/index.php');

这是phpunit.xml形式相同的目录:

<?xml version="1.0" encoding="UTF-8"?>
<phpunit
     bootstrap="bootstrap.php"

     backupStaticAttributes="false"

     cacheTokens="false"
     colors="false"
     convertErrorsToExceptions="true"
     convertNoticesToExceptions="true"
     convertWarningsToExceptions="true"
     forceCoversAnnotation="false"
     mapTestClassNameToCoveredClassName="false"
     printerClass="PHPUnit_TextUI_ResultPrinter"

     processIsolation="false"
     stopOnError="false"
     stopOnFailure="false"
     stopOnIncomplete="false"
     stopOnSkipped="false"
     testSuiteLoaderClass="PHPUnit_Runner_StandardTestSuiteLoader"

     strict="false"
     verbose="false"
    >

    <testsuites>
        <testsuite name="AllTests">
        <directory>.</directory>
        </testsuite>
    </testsuites>

    <filter>
        <blacklist>
            <directory suffix=".php"></directory>
            <file></file>
            <exclude>
                <directory suffix=".php"></directory>
                <file></file>
            </exclude>
        </blacklist>
        <whitelist processUncoveredFilesFromWhitelist="true">
            <directory suffix=".php"></directory>
            <file></file>
            <exclude>
                <directory suffix=".php"></directory>
                <file></file>
            </exclude>
        </whitelist>
    </filter>
</phpunit>

不要忘记在测试设置中加载您的应用程序类。你可以用cakephp的方式做到这一点。例如,如果您的控制器名为calendar,则calendarTest.php可能如下所示:

<?php

/**
 * Class ComponentsCommonTest
 * @property calendarController $calendarController
 */
class CalendarTest extends PHPUnit_Framework_TestCase
{
    /**
     * @var calendarController $calendarController
     */
    private $calendarController;

    function setUp()
    {
        App::import('Core', array('View', 'Controller', 'Model', 'Router'));
        App::import('Controller', 'Calendar');
        $this->calendarController =& new CalendarController();
        $this->calendarController->constructClasses();
        $this->calendarController->layout = null;
    }
}

模型,供应商类等相同。对我很有用。

答案 1 :(得分:3)

不幸的是,CakePHP不能与PHPUnit一起使用。 CakePHP已经切换到使用SimpleTest,你将有两个选择之一,重构你的测试以使用SimpleTest或修改核心以使用PHPUnit。

然而,应该说Mark Story has stated that CakePHP 2.0 will use PHPUnit为它的测试框架,所以如果你能等到那时候可能会成为最好的选择。

CakePHP 1.3 Book on Testing