Не удается расширить PHPUnit_Extensions_Database_TestCase - PullRequest
2 голосов
/ 27 марта 2012

Я полностью убедился в TDD и пытался использовать его в своей книге, надеясь получить почти 100% охват тестов и всегда писать тесты перед новым кодированием.

Я использую phpUnit поверхZF, и хотя иногда я чувствую некоторый прогресс, в других я чувствую, что я полностью застрял.

Мое приложение ориентировано на базу данных, и мне нужно начать тестировать (и кодировать) базу данныхпостоянство.

Я смотрел на слайды из Презентации тестирования ламповых приложений Стивена Бергмана , и мне кажется очень ясным и понятным, как проверить взаимодействие с базой данных.

Но,Я всегда пытаюсь использовать класс, который расширяет 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();
    }
}

И когда я создаю тест как, например, этот tryTest.php

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

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

Я получаю следующее сообщение об ошибке или что-то похожее на него другими способами:

Неустранимая ошибка: класс 'PHPUnit_Extensions_Database_DefaultTester' не найден в C: \ xampp \ php\ PEAR \ PHPUnit \ Extensions \ Database \ TestCase.php в строке 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-> run () C: \ xampp \ php \ PEAR \ PHPUnit \ TextUI \ Command.php: 130 0.4012TUnTeNeTeTeNTeNT_TeE_T_TU_RT_50_64_RU_TU_T_WRT> doRun () C: \ xampp \ php \ PEAR \ PHPUnit \ TextUI \ Command.php: 192 0,7182 5750296 5. PHPUnit_Framework_TestSuite-> run () C: \ xampp \ php \ PEAR \ PHPUnit \ TextUI \ TestRunner.php: 325 2.4058 11441872 6. PHPUnit_Framework_TestSuite-> run () C: \ xampp \ php \ PEAR \ PHPUnit \ Framework \ TestSuite.php: 705 2.4060 11442104_Fite_Tur_it_TU_TUUTUTTrunTest () C: \ xampp \ php \ PEAR \ PHPUnit \ Framework \ TestSuite.php: 745 2.4060 11442104 8. PHPUnit_Framework_TestCase-> run () C: \ xampp \ php \ PEAR \ PHPUnit \ Framework \ TestSuite.php: 772 2.406111442104 9. PHPUnit_Framework_TestResult-> run () C: \ xampp \ php \ PEAR \ PHPUnit \ Framework \ TestCase.php: 751 2.4066 11441136 10. PHPUnit_Framework_TestCase-> runBare () C: \ xampp \ php \ PEAR \ PHPTestResult.php: 649 2.4079 11494800 11. PHPUnit_Extensions_Database_TestCase-> setUp () C: \ xampp \ php \ PEAR \ PHPUnit \ Framework \ TestCase.php: 801 2.4080 11494832 12. PHPUnit_Extensions_Database_Test \ \ \ C:PEAR \ PHPUnit \ Extensions \ Database \ TestCase.php: 202 2.4080 11494832 13. PHPUnit_Extensions_Database_TestCase-> newDatabaseTester () C: \ xampp \ php \ PEAR \ PHPUnit \ Extensions \ Database \ TestCase.php: 92

На C: \ xampp \ php \ PEAR \ PHPUnit \ Extensions \ Database есть файл DefaultTester.php, и я не могу понять, что происходит ...

Я попал в эту конфигурацию после следования [Zendcast от Jon Lebensold] [2].В тот момент у меня были трудные времена, пытаясь решить некоторые проблемы, но после некоторой помощи @edorian я обнаружил, что основная проблема была между моим стулом и клавиатурой ...: - / Вероятно, сейчас та же ситуация ...

Я даже пытался создать MapperTestCase аналогично тому, как Джон создавал свой файл ControllerTestCase.php, но это все равно мне не помогло.

Итак, теперь я здесь, пытаясь получить некоторыепомогите узнать, что не так с моей средой или подходом.

1 Ответ

2 голосов
/ 27 марта 2012

Не совсем уверен, что он решил все проблемы, но при поиске в Stackoverflow я нашел бы этот вопрос, который сообщил о чем-то похожем моему:

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 не были найдены, но, по крайней мере, я смогу продвинуться ...

...