无法扩展PHPUnit_Extensions_Database_TestCase

时间:2012-03-26 20:44:20

标签: php tdd persistence phpunit dbunit

我已经完全相信TDD并试图在书中使用它,期待有接近100%的测试覆盖率并且总是在新编码之前编写测试。

我正在使用phpUnit而不是ZF,虽然我有一天会感觉到一些进步,但在其他方面,我觉得我完全陷入困境。

我的应用程序非常以数据库为中心,我需要开始测试(和代码......)数据库持久性。

我正在查看来自Testing Lamp Appplications Presentation by Stephenn Bergmann的幻灯片,如何测试数据库交互似乎非常明确和直接。

但是,我总是尝试使用扩展PHPUnit_Extensions_Database_TestCase的类。我有关于在'PHPUnit_Extensions_Database'命名空间中找不到某个类的错误消息。

可能我错过了一些关键点,因为当我尝试遵循我能找到的任何其他解决方案和建议时遇到同样的问题,例如答案和演示文稿由于我的声誉而无法链接到此处...

在所有情况下,当我扩展Database_TestCase时,找不到某个类。

我怀疑与我引导的方式有关,但我找不到我做错的事。我编写的扩展ControllerTestCase的测试运行良好。

我正在跑过Xampp。 phpUnit版本os 3.6.10,php是5.3.8,Zend Framework是1.11.11

我使用以下phpunit.xml作为php配置:

<phpunit bootstrap="./application/bootstrap.php" colors="true">
<testsuite name="Some">
    <directory>./</directory>
</testsuite>

<filter>
    <whitelist>
        <directory suffix=".php">../application/</directory>
        <directory suffix=".php">../library/MyApp/</directory>
        <exclude>
            <directory suffix=".phtml">../application/</directory>
            <file>../application/Bootstrap.php</file>
            <file>../application/modules/default/controllers/ErrorController.php</file>
        </exclude>
    </whitelist>
</filter>

<logging>
    <log type="coverage-html" target="./log/report" charset="UTF-8" yui="true" hightlight="true" lowupperbound="50" highlowerbound="80">
    <log type="testdox" target="./log/testdox.html">
</log></log></logging>

我的Bootstrap.php是:

    error_reporting(E_ALL | E_STRICT);

// Define path to application directory
defined('APPLICATION_PATH')
    || define('APPLICATION_PATH', realpath(dirname(__FILE__) . '/../../application'));

// Define application environment
defined('APPLICATION_ENV')
    || define('APPLICATION_ENV', (getenv('APPLICATION_ENV') ? getenv('APPLICATION_ENV') : 'testing'));

// Ensure library/ is on include_path
set_include_path(implode(PATH_SEPARATOR, array(
    realpath(APPLICATION_PATH . '/../library'),
    get_include_path(),
)));

require_once 'Zend/Application.php';
require_once 'ControllerTestCase.php';

和ControllerTestCase.php

require_once 'Zend/Application.php';
require_once 'Zend/Test/PHPUnit/ControllerTestCase.php';
class ControllerTestCase extends Zend_Test_PHPUnit_ControllerTestCase
{
    /**
     * @var Zend_Application
    */
    protected $application;

    public function setUp() {
        $this->bootstrap = array($this, 'appBootstrap');
        parent::setUp();
    }

    public function appBootstrap() {
        $this->application = new Zend_Application(APPLICATION_ENV, APPLICATION_PATH . '/configs/application.ini');
        $this->application->bootstrap();
    }
}

当我创建一个Test时,例如,这个tryTest.php

    require_once 'PHPUnit/Extensions/Database/TestCase.php';

class TryTest extends PHPUnit_Extensions_Database_TestCase {
    /*** any test or even just getConnection ***/
}

我尝试以其他方式收到以下错误消息或与其接近的内容:

  
    

致命错误:在C:\ xampp \ php \ PEAR \ PHPUnit \ Extensions \ Database \ TestCase.php中找不到类'PHPUnit_Extensions_Database_DefaultTester'     第132行

  
     

调用堆栈:       0.0003 326968 1. {main}()C:\ xampp \ php \ phpunit:0       0.0141 745152 2. PHPUnit_TextUI_Command :: main()C:\ xampp \ php \ phpunit:46       0.0141 745568 3. PHPUnit_TextUI_Command-&gt; run()C:\ xampp \ php \ PEAR \ PHPUnit \ TextUI \ Command.php:130       0.4012 5280032 4. PHPUnit_TextUI_TestRunner-&gt; doRun()C:\ xampp \ php \ PEAR \ PHPUnit \ TextUI \ Command.php:192       0.7182 5750296 5. PHPUnit_Framework_TestSuite-&gt; run()C:\ xampp \ php \ PEAR \ PHPUnit \ TextUI \ TestRunner.php:325       2.4058 11441872 6. PHPUnit_Framework_TestSuite-&gt; run()C:\ xampp \ php \ PEAR \ PHPUnit \ Framework \ TestSuite.php:705       2.4060 11442104 7. PHPUnit_Framework_TestSuite-&gt; runTest()C:\ xampp \ php \ PEAR \ PHPUnit \ Framework \ TestSuite.php:745       2.4060 11442104 8. PHPUnit_Framework_TestCase-&gt; run()C:\ xampp \ php \ PEAR \ PHPUnit \ Framework \ TestSuite.php:772       2.4061 11442104 9. PHPUnit_Framework_TestResult-&gt; run()C:\ xampp \ php \ PEAR \ PHPUnit \ Framework \ TestCase.php:751       2.4066 11441136 10. PHPUnit_Framework_TestCase-&gt; runBare()C:\ xampp \ php \ PEAR \ PHPUnit \ Framework \ TestResult.php:649       2.4079 11494800 11. PHPUnit_Extensions_Database_TestCase-&gt; setUp()   C:\ XAMPP \ PHP \ PEAR \ PHPUnit的\框架\ TestCase.php:801       2.4080 11494832 12. PHPUnit_Extensions_Database_TestCase-&gt; getDatabaseTester()   C:\ XAMPP \ PHP \ PEAR \ PHPUnit的\扩展\数据库\ TestCase.php:202       2.4080 11494832 13. PHPUnit_Extensions_Database_TestCase-&gt; newDatabaseTester()   C:\ XAMPP \ PHP \ PEAR \ PHPUnit的\扩展\数据库\ TestCase.php:92

在C:\ xampp \ php \ PEAR \ PHPUnit \ Extensions \ Database中有一个DefaultTester.php,我无法弄清楚发生了什么......

按照这个[Jon Lebensold的Zendcast] [2]后我得到了这个配置。那一刻,我有点困难,试图解决一些问题,但在@edorian的一些帮助后,我发现主要问题是在我的椅子和键盘之间...: - /可能现在情况相同......

我甚至尝试以与Jon构建他的ControllerTestCase.php文件类似的方式创建MapperTestCase,但无论如何这对我没有帮助。

所以,现在我在这里,试图找到帮助,找出我的环境或方法有什么问题。

1 个答案:

答案 0 :(得分:2)

不确定它是否已解决所有问题,但在Stackoverflow上搜索,我会发现这个question that reported something similar

require_once 'Zend/Loader/AutoLoader.php';
$autoloader = Zend_Loader_AutoLoader::getInstance();
$autoloader->registerNamespace('PHPUnit_');

当我尝试将上面的代码放在我的bootstrap.php上时,我至少可以使$connection = new PHPUnit_Extensions_Database_DB_DefaultDatabaseConnection($pdo, 'mydb');正常工作

我仍然无法理解为什么没有找到PHPUnit扩展,但是,至少我会提前...