【问题标题】:Errors when testing with PHPUnit 3.5使用 PHPUnit 3.5 测试时出错
【发布时间】:2011-04-18 16:49:48
【问题描述】:

安装 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

【问题讨论】:

    标签: unit-testing zend-framework testing phpunit


    【解决方案1】:

    好吧,实际上 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 包,其中包含所有必要的文件。

    【讨论】:

    • 谢谢终于让这个工作了,不得不把它改成 pear 卸载 phpunit/PHPUnit_MockObject
    【解决方案2】:

    对于 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/
    

    【讨论】:

    • 我的 PHPUNit 没有安装在这个目录中。所以这行不通
    【解决方案3】:

    你需要

    require_once 'PHPUnit/Framework.php'
    

    从 phpunit 3.4 IIRC 开始。不再尝试加载单个 PHPUnit 文件。

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

    require_once 'PHPUnit/Autoload.php';
    

    【讨论】:

    • 这给了我一个通知,我不再需要它了。除此之外,错误并没有消失。
    • 是的,我以前就是这样。但这并不能解决问题。
    • 我没有看到任何 require_once "PHPUnit/Autoload.php";您问题中的代码,这就是为什么我没有看到它。
    • 它在 testhelper 文件中,这是其中一个文件所必需的。我已将它添加到我的开始帖子中。
    • 看来我对你的自动加载器很正确:github.com/sebastianbergmann/phpunit/issues/closed#issue/31
    【解决方案4】:

    我不得不做同样的事情@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

    【讨论】:

    猜你喜欢
    • 2017-08-05
    • 2016-03-23
    • 1970-01-01
    • 2023-03-24
    • 2014-05-08
    • 1970-01-01
    • 1970-01-01
    • 2011-05-19
    • 1970-01-01
    相关资源
    最近更新 更多