El problema
Para mejorar la calidad de mi código, he decidido intentar aprender a probar mi código utilizando Unit Testing en lugar de mis mediocres en el mejor de los casos soluciones de prueba.
Decidí instalar PHPUnit usando Composer para una biblioteca personal que me permite lograr funciones de base de datos comunes. Al principio no tenía un archivo de configuración para PHPUnit y cuando ejecuté comandos como:
$ phpunit tests/GeneralStringFunctions/GeneralStringFunctionsTest
Tenga en cuenta que este es un comando de terminal, por lo que no incluí la .php
extensión. El GeneralStringFunctionsTest mencionado anteriormente es en realidad un GeneralStringFunctionsTest.php
archivo.
El resultado es lo que esperaba:
Tiempo: 31 ms, Memoria: 2,75 Mb
OK (1 prueba, 1 afirmación)
Luego intenté usar un archivo de configuración para cargar automáticamente el conjunto de pruebas en lugar de tener que escribir manualmente el archivo cada vez. Creé un archivo llamado phpunit.xml
en mi directorio raíz e ingresé lo siguiente en el archivo: http://pastebin.com/0j0L4WBD :
<?xml version = "1.0" encoding="UTF-8" ?>
<phpunit>
<testsuites>
<testsuite name="Tests">
<directory>tests</directory>
</testsuite>
</testsuites>
</phpunit>
Ahora, cuando ejecuto el comando:
phpunit
Obtengo el siguiente resultado:
PHPUnit 4.5.0 por Sebastian Bergmann y colaboradores.
Configuración leída de /Users/muyiwa/Projects/DatabaseHelper/phpunit.xml
Tiempo: 16 ms, memoria: 1,50 Mb
¡No se han realizado pruebas!
En caso de que sea útil, la estructura de mi directorio es la siguiente:
src - Directorio de nivel superior (con todo mi código fuente)
pruebas - Directorio de nivel superior (con todas mis pruebas, estructurado igual que mi carpeta src )
proveedor - Archivos de terceros de Composer
También tengo el compositor json y el archivo de bloqueo, así como el archivo phpunit xml en el nivel superior como archivos.
Cosas que he probado
- Cambiar el directorio
phpunit.xml
atests/GeneralStringFunctions
- Cambiar el directorio
phpunit.xml
a./tests
- Mover el
phpunit.xml
archivo altests
directorio y luego cambiar el directorio para que sea en./
lugar detests
. - Agregar un atributo de sufijo a la etiqueta de directorio
phpunit.xml
para especificar "Pruebas" como sufijo explícito.
fuente
tests/GeneralStringFunctions/GeneralStringFunctionsTest
una carpeta o un nombre de archivo?GeneralStringFunctionsTest.php
. En la interfaz de línea de comandos, no ingresé la.php
extensión porque funcionaba sin ella.Test.php
lugar deTest
en su caso, pero sin embargo, puede omitirlo, ya queTest.php
es el valor predeterminado.phpunit.xml
?Respuestas:
Por lo que vale (llegar tarde), me encontré con esto recientemente mientras estaba haciendo un nuevo proyecto de Laravel 5.1 para un sitio web simple. Traté de depurarlo y estaba confundido cuando lo intenté:
(que tiene una prueba predeterminada que solo afirma que verdadero es verdadero)
y vi la salida
Lo que terminó siendo el problema para mí estaba relacionado con mi instalación de PHP: "phpunit" se registró globalmente y se configuró de manera diferente, mientras que el phpunit que vino con la instalación de Laravel se configuró correctamente y funcionó perfectamente.
Entonces, la solución es ejecutar phpunit configurado por el proveedor (desde el mismo directorio raíz que app / y tests /):
¡Espero que ayude a alguien más!
fuente
vendor/bin/phpunit
lugar delphpunit
binario global . Incluso he ido tan lejos como para eliminar elphpunit
binario global para no volver a cometer accidentalmente el mismo error, y no ha aparecido desde entonces. Marcaré esto como la respuesta aceptada, ya que probablemente sea la razón../vendor/bin/phpunit
me funcionó en una nueva instalación de laravel 5.4phpunit
alias
para./vendor/bin/phpunit
Su archivo XML está bien como está. Sin embargo, debe asegurarse de que los archivos PHP en su
tests/
carpeta tengan el siguiente nombre:tests / Test.php <--- Tenga en cuenta la "T" mayúscula
tests / usuario Test.php
tests / fooBar Test.php
etc.
Los nombres de archivo deben terminar con "Test.php" . Esto es lo que busca PHPUnit dentro de los directorios.
Además, cada método de prueba debe tener un nombre que comience con "prueba":
public function testFooBar() { // Your test code }
¡Espero que ayude!
fuente
--test-suffix=anything.php
para anularEn Windows, use el siguiente comando en la terminal
eso es si el comando
devuelve "¡No se han ejecutado pruebas!"
mientras estás en Mac
Espero eso ayude.
fuente
phpunit
en su ruta global (puede verificar que se ejecute algo comophpunit --version
y ver si coincide con lo que espera. Xampp generalmente instala un phpunit en el mismo directorio de php bin. Ese fue el problema para mí.Tuve el mismo problema después de que PHPUnit en nuestras máquinas virtuales se actualizara a la versión 6. Incluso --debug y --verbose no dijeron nada útil, solo "No se ejecutaron pruebas". Al final resultó que las clases y los espacios de nombres se cambiaron en la nueva versión y simplemente no quería ejecutar los archivos que contenían referencias a clases antiguas. La solución para mí fue simplemente reemplazar en cada caso de prueba esto:
class MyTestCase extends \PHPUnit_Framework_TestCase {...}
con:
use PHPUnit\Framework\TestCase; class MyTestCase extends TestCase {...}
fuente
Me doy cuenta de que esto es muy antiguo, pero también me pasó a mí. Espero que esto ayude a alguien.
Mi problema fue que olvidé el símbolo '@' en / ** @test * /
INCORRECTO:
/** test */ function a_thread_can_be_deleted() { ... }
CORRECTO:
/** @test */ function a_thread_can_be_deleted() { ... }
fuente
@return void
y no contiene '@test', que es la razón por la que phpunit no pudo identificar como prueba.Me tiré del pelo durante 10 minutos antes de decidir usar --debug (un buen camino a seguir) para descubrir el simple hecho de que el nombre del archivo no respetaba la convención de nomenclatura , tenía una "s" adicional al final .
incorrecto
Correcto
espero que esta nota pueda ayudar a alguien
fuente
Solo necesita llamarlo desde el archivo del proveedor
vendor\bin\phpunit
Aviso \ No /fuente
En lugar de ejecutar phpunit
utilizar
proveedor \ bin \ phpunit
fuente
si está utilizando PHPSTORM, vaya a Configuración y luego vaya a
Test Frameworks
y haga clic en + y elija
PHPUnit Local
entoncesUse Composer Auto Loader
luego pegue esto como en la ruta al campo del scriptC:\{YOUR PROJECT NAME}\vendor\autoload.php
haga clic en Aceptar
HAPPY TESTING
fuente
Verifique el archivo phpunit.xml , mire dentro de las suites de prueba.
Mi versión de phpunit (2019) busca archivos que terminen (sufijo) * Test.php. Por lo tanto, asegúrese de que todos los archivos de prueba tengan el nombre correcto (por ejemplo, BookTest.php es correcto, BookTests.php no lo es, BookTestCase.php no lo es).
fuente
Llegó tarde a la fiesta, pero esta información puede ayudar a otros.
Las soluciones anteriores no funcionaron para mí. A partir de Laravel 7.x, de forma predeterminada, PHPUnit solo ejecuta archivos PHP con el sufijo "Test.php". Por ejemplo, si crea una prueba, nombrarla
CreateUser
no funcionará, mientras que nombrarlaCreateUserTest
funcionará.Para superar la limitación, vaya
phpunit.xml
y modifique elsuffix
atributo de losdirectory
elementos:... <testsuite name="Unit"> <!-- modify suffix --> <directory suffix=".php">./tests/Unit</directory> </testsuite> <testsuite name="Feature"> <!-- modify suffix --> <directory suffix=".php">./tests/Feature</directory> </testsuite> ...
Esto le indicará a PHPUnit que ejecute todos los archivos con
.php
extensión de directorios. Nota para borrar el caché de la aplicación después de la actualizaciónphpunit.xml
:Puede encontrar información adicional sobre la configuración XML de PHPUnit aquí: https://phpunit.de/manual/6.5/en/appendixes.configuration.html
fuente
¿Ha agregado un conjunto de pruebas a su archivo phpunit.xml?
<phpunit> <testsuite name="app1" > <directory>./</directory> </testsuite> </phpunit>
Puede agregar varios directorios allí.
fuente
Time: 28 ms, Memory: 1.50Mb No tests executed!
Configuration read from /Users/muyiwa/Projects/Web Development/DatabaseHelper/phpunit.xml Time: 66 ms, Memory: 1.50Mb No tests executed!
. Definitivamente funciona cuando lo referencia manualmente, simplemente no le gusta cargar desde el archivo de configuración por alguna razón :(Para mí, el uso de phpunit --debug me mostró qué prueba no estaba ejecutando, por dentro, tenía
$this->visit('/') ->see('Laravel');
y creo que debido a que el directorio estaba protegido con autenticación .htaccess, no pudo acceder a la página
La solución para mí fue sacar esta prueba (o probablemente sacar la autenticación .htaccess)
fuente
Esto es muy tarde pero espero que ayude a alguien.
Conseguí que mis pruebas se ejecutaran usando una referencia absoluta. estructura de carpetas [proyecto / tests / test.php]
mi línea de directorio se veía así ./tests/test.php
fuente
Quizás un poco al margen, pero si estás (como yo) usando Laravel en Vagrant, asegúrate de que estás ejecutando phpunit dentro de la caja vagrant y no en el "lado de Windows". :)
fuente
Tuve el problema de que no se ejecutaban pruebas, incluso cuando las cosas estaban bien configuradas.
La causa fue que el espacio de nombres no fue el primer comando del archivo, fue después de algunos comentarios de bloque de documentos.
La reversión hizo que phpunit viera las pruebas y se ejecutara correctamente.
fuente
El mío fue un poco divertido.
Cuando usé,
php artisan make:test
puse accidentalmente .php como elProductRewardPointController.php
que creóProductRewardPointController.php.php
y phpunit simplemente lo ignoró.Simplemente elimino el .php adicional y las cosas vuelven a la normalidad
fuente
Tuve el mismo problema de No se ejecutaron pruebas. , resuelto manteniendo el mismo nombre de archivo y nombre de clase .
fuente
Si está utilizando IDE como JetBrains PHPStorm , tenga en cuenta también que: en la
Run/Debug Configurations
ventana,Test scope
debe configurarsedirectory
y apuntar ese directorio a latests
ubicación de su carpeta.Solo me tomó media hora darme cuenta de que olvidé configurar el directorio. Puede usar global
phpunit.phar
siempre que configure el alcance de la prueba y el directorio correctamente, el IDE se encargará de otras cosas por usted.fuente
Los nombres de las funciones en el archivo de prueba deben tener el prefijo
test
o debe haber un comentario agregado antes de la función/** @test */
Asegúrese de que no sea
/* @test */
porque eso no funciona. debe haber dos asteriscos después de la barra inclinada, no uno.
fuente
el uso de la consola cmd resolvió este problema pasando la prueba de ruta completa realizada
No encontré otra manera de hacerlo No funciona de esta manera
Espero que esto haya sido útil para alguien.
fuente