使用PHPUnit 3.5进行测试时出错

时间:2010-09-29 08:12:10

标签: unit-testing zend-framework testing phpunit

安装phpUnit 3.5后,我试图以这种方式运行我的测试:

phpunit AllTests.php

但我收到以下错误:

PHP Fatal error:  Class 'PHPUnit_TextUI_TestRunner' not found in /usr/share/php/PHPUnit/TextUI/Command.php on line 140
Fatal error: Class 'PHPUnit_TextUI_TestRunner' not found in /usr/share/php/PHPUnit/TextUI/Command.php on line 140

这是我的AllTests.php

的内容

以下是Alltests.php的内容

      <?php
    if (!defined('PHPUnit_MAIN_METHOD')) {
        define('PHPUnit_MAIN_METHOD', 'AllTests::main');
    }

    /**
     * TestHelper
     */
    require_once 'TestHelper.php';

    /**
     * @see SF_Unit_AllTests
     */
    require_once 'unit/AllTests.php';

    class AllTests
    {
        public static function main()
        {
            $parameters = array();

            PHPUnit_TextUI_TestRunner::run(self::suite(), $parameters);
        }

        public static function suite()
        {
            $suite = new PHPUnit_Framework_TestSuite('EventManager');

            $suite->addTest(SF_Unit_AllTests::suite());

            return $suite;
        }
    }

    if (PHPUnit_MAIN_METHOD == 'AllTests::main') {
        AllTests::main();
    }

这是Unit / AllTests.php文件

<?php
if (!defined('PHPUnit_MAIN_METHOD')) {
    define('PHPUnit_MAIN_METHOD', 'SF_Unit_AllTests::main');
}

/**
 * Testhelper
 */
require_once dirname(__FILE__). '/../TestHelper.php';

/**
 * Include unit tests
 */
require_once('unit/Model/ModelAbstractTest.php');
require_once('unit/Model/EventTest.php');
//require_once('unit/Model/UserTest.php');
//require_once('unit/Model/AuthenticationTest.php);

/**
 * 
 * @author jigal
 *
 */
class SF_Unit_AllTests
{
    /**
     * 
     * @return unknown_type
     */
    public static function main()
    {
        PHPUnit_TextUI_TestRunner::run(self::suite());
    }

    /**
     * 
     * @return PHPUnit_Framework_TestSuite
     */
    public static function suite()
    {
        $suite = new PHPUnit_Framework_TestSuite('EventManager Unit tests');
        $suite->addTestSuite('ModelAbstractTest');
        $suite->addTestSuite('EventTest');
        //$suite->addTestSuite('UserTest');
        //$suite->addTestSuite('Authentication')
        return $suite;
    }


}

if (PHPUnit_MAIN_METHOD == 'SF_Unit_AllTests::main') {
    SF_Unit_AllTests::main();
}

TestHelper.php

/**
 * Get PHPUnit
 */
require_once 'PHPUnit/Autoload.php';


/*
 * Set error reporting level
 */
error_reporting( E_ALL | E_STRICT );

/**
 * Default timezone
 */
date_default_timezone_set('Europe/London');

/*
 * Set the include path
 */
    /*
 * Set the include path
 */

    $root  = realpath(dirname(__FILE__) . '/../');
    $paths = array(
        "/usr/share/php/",
        "$root/library/Incu",
        "$root/library",
        "$root/tests",
        "$root/application"
    );
    set_include_path(get_include_path() . PATH_SEPARATOR . implode(PATH_SEPARATOR, $paths))

;


defined('APPLICATION_PATH')
    or define('APPLICATION_PATH', realpath(dirname(__FILE__) . '/../application'));
defined('APPLICATION_ENV')
or define('APPLICATION_ENV', 'development');
    require_once 'Zend/Application.php';
/**
 * Autoloader helpers
 */
function _SF_Autloader_SetUp() 
{
    require_once 'Zend/Loader/Autoloader.php';

    $loader = Zend_Loader_Autoloader::getInstance();
    $loader->registerNamespace('SF_');
    $application = new Zend_Application(
            APPLICATION_ENV,
            APPLICATION_PATH.'/configs/events.ini'
    );

}

function _SF_Autloader_TearDown()
{
    Zend_Loader_Autoloader::resetInstance();
    $loader = Zend_Loader_Autoloader::getInstance();
    $loader->registerNamespace('SF_');
}

/**
 * Init autoloader
 */
_SF_Autloader_SetUp();

/**
 * Start session now!
 */
Zend_Session::$_unitTestEnabled = true;
Zend_Session::start();

/**
 * Ignore folders from code coverage etc
 */
//PHPUnit_Util_Filter::addDirectoryToFilter("$root/tests");
//PHPUnit_Util_Filter::addDirectoryToFilter("$root/library/Zend");


PHP_CodeCoverage_Filter::getInstance()->addDirectoryToBlacklist("$root/tests");
PHP_CodeCoverage_Filter::getInstance()->addDirectoryToBlacklist("$root/library/Zend");

任何想法?

更新

我已将/ usr / share / php添加到我的包含路径中。 现在我得到了一个不同的错误:

PHPUnit 3.5.0 by Sebastian Bergmann.

....PHP Fatal error:  Class 'PHPUnit_Framework_MockObject_Generator' not found in /usr/share/php/PHPUnit/Framework/TestCase.php on line 1049

Fatal error: Class 'PHPUnit_Framework_MockObject_Generator' not found in /usr/share/php/PHPUnit/Framework/TestCase.php on line 1049

4 个答案:

答案 0 :(得分:10)

嗯,实际上Laurent Laffont提供了正确答案:MockObject安装不完整。

Installation Instructions你需要卸载以前的PHPUnit,然后才能安装3.5版

但这似乎还不够,您还必须卸载额外的软件包(在本例中为PHPUnit_MockObjects),然后才安装新的文字:

pear uninstall phpunit/phpunit
pear uninstall phpunit/PHP_MockObject
pear install phpunit/phpunit

重新安装了PHP_MockObject包,其中包含所有必需的文件。

答案 1 :(得分:5)

对于PHPUnit_Framework_MockObject_Generator错误,必须手动获取http://pear.phpunit.de/get/PHPUnit_MockObject-1.0.0.tgz并复制

PHPUnit_MockObject-1.0.0/PHPUnit/Framework/MockObject/ 

/usr/share/pear/PHPUnit/Framework/

答案 2 :(得分:3)

你需要

require_once 'PHPUnit/Framework.php'

因为phpunit 3.4 IIRC。不要再尝试加载单个PHPUnit文件了。

哦,在PHPUnit 3.5中,你应该使用一个自动加载器:

require_once 'PHPUnit/Autoload.php';

答案 3 :(得分:3)

我必须做同样的事情@Laurent说,你的phpunit安装在哪里都没关系。

如果您使用pear安装PHPUnit,只需在shell中执行pear config-get php_dir。 PHPUnit很可能安装在该目录中。

无论您的PHPUnit安装在何处,请将PHPUnit/Framework/MockObject上的目录替换为您从此处下载的文件夹中的PHPUnit/Framework/MockObject/目录  http://pear.phpunit.de/get/PHPUnit_MockObject-1.0.0.tgz