Agregué PHPUnit a mi proyecto Symfony como se describe en la documentación . Crear y ejecutar la primera prueba que extiende Symfony\Bundle\FrameworkBundle\Test\WebTestCase
no fue un problema.
Ahora me gustaría crear una subclase personalizada de WebTestCase
que proporcione características comunes para otras clases de prueba:
// .../projectDir/tests/BaseTestCase.php namespace My\Project\Tests; use Symfony\Bundle\FrameworkBundle\Test\WebTestCase; class BaseTestCase extends WebTestCase { protected function doSomething() {} } // .../projectDir/tests/SomeTest.php namespace My\Project\Tests; use My\Project\Tests\BaseTestCase; class SomeTest extends BaseTestCase { protected function testSomething() { $this->doSomething(); ... } }
Cuando php bin/phpunit
, aparece el error "Clase no encontrada":
$ php bin/phpunit PHP Fatal error: Uncaught Error: Class 'My\Project\Tests\BaseTestCase' not found in /path/to/projectDir/tests/SomeTest.php:6 Stack trace: #0 /path/to/projectDir/vendor/phpunit/phpunit/src/Util/FileLoader.php(65): include_once() #1 /path/to/projectDir/vendor/phpunit/phpunit/src/Util/FileLoader.php(49): PHPUnit\Util\FileLoader::load('/path/to/...') #2 /path/to/projectDir/vendor/phpunit/phpunit/src/Framework/TestSuite.php(402): PHPUnit\Util\FileLoader::checkAndLoad('/path/to/...') #3 /path/to/projectDir/vendor/phpunit/phpunit/src/Framework/TestSuite.php(530): PHPUnit\Framework\TestSuite->addTestFile('/path/to/...') #4 /path/to/projectDir/vendor/phpunit/phpunit/src/TextUI/TestSuiteMapper.php(67): PHPUnit\Framework\TestSuite->addTestFiles(Array) #5 /path/to/proje in /kunden/100170_47877/webpages/pockey/webpage/dev/vendor/phpunit/phpunit/src/TextUI/Command.php on line 98
Revisé dos veces el nombre de la clase, el espacio de nombres y la declaración de use
(que no debería ser necesaria, ya que ambas clases están en la misma carpeta/espacio de nombres).
¿Necesito registrar BaseTestCase
en PHPUnit
de alguna manera para que sea una superclase válida para mis pruebas?
Parece que le falta la declaración de las rutas de clase para su directorio de prueba.
Generalmente, para las clases de prueba en sí no es necesario, ya que PhpUnit cargará los archivos de prueba y leerá las clases directamente. Pero cualquier otra clase a la que se haga referencia en cualquiera de las pruebas deberá pasar por el cargador automático. Y si no ha declarado dónde encontrar el espacio de nombres Test
, intentará encontrarlo con sus archivos de proyecto normales (por ejemplo, en src/
).
Agregue una clave autoload-dev
a su composer.json
. Por ejemplo, algo como esto:
{ "autoload": { "psr-4": { "My\\Project\\": "src/" } }, "autoload-dev": { "psr-4": { "My\\Project\\Tests\\": "tests/" } } }
Vuelque el cargador automático después de esto ( composer dump-autload
), e intente ejecutar sus pruebas nuevamente.