Armado del entorno de pruebas en PHP

20/26

Lectura

Para poder ejecutar el código que veremos en las próximas clases deberás contar con un entorno donde poder ejecutar PHPUnit (El framework de pruebas unitarias más utilizado con PHP).

1. Descargar el proyecto

El primer paso es clonar el repositorio https://github.com/mchojrin/platzi-tdd

Si no tienes aún instalado el cliente de git puedes descargarlo de https://git-scm.com/downloads (Selecciona la descarga que corresponda con tu sistema operativo).

Si utilizas Windows es muy recomendable descargar GitBash (Una consola tipo POSIX que incluye todas las herramientas que necesitarás para interactuar cómodamente con el sistema de control de versiones)

1.png

Una vez tengas git instalado, abre un terminal y clona el repositorio con el comando git clone [email protected]:mchojrin/platzi-tdd.git

2.png

2. Instalar PHP

Si estás en un entorno Linux o Mac probablemente ya tendrás PHP instalado, con lo cual puedes saltar este paso.

Si estás en Windows deberás descargar PHP de aquí y probablemente también tengas que instalar el Runtime de Visual C++ que puedes descargar de aquí.

Para comprobar que la instalación haya sido exitosa debes abrir una terminal y ejecutar el comando php -v.

Deberías ver algo como:

3.png

3. Instalar Composer

Una vez instalado PHP el siguiente paso es instalar composer, un manejador de dependencias para php (Puedes leer más de qué se trata aquí).

La forma más simple de instalar composer es hacerlo a través del propio php siguiendo las instrucciones presentes aquí.

Si utilizas Windows puedes usar este instalador.

4. Instalar PHPUnit

PHPUnit es una librería estándar para la ejecución de pruebas unitarias de PHP.

En general puedes descargarlo de aquí. En este caso, utilizaremos la versión de instalación por proyecto.

PHPUnit es la dependencia principal de nuestro proyecto, si tienes instalado composer, su instalación es muy simple.

Sólo debes abrir una terminal en el directorio donde descargaste el proyecto y ejecutar composer install.

El resultado debería verse similar a:

4.png

Para verificar la instalación ejecuta el comando php vendor/phpunit/phpunit/phpunit

La salida debería verse así:

5.png

5. Configurar el entorno

Durante este curso utilizamos Visual Studio Code. Si ya dispones de otro entorno y lo conoces bien puedes utilizarlo, si no tienes preferencia te recomiendo que utilices VS Code.

Puedes descargarlo de https://code.visualstudio.com/Download

Una vez instalado abre la carpeta donde descargaste el proyecto en Visual Studio:

6.png

Deberías ver algo como:

7.png

Escribe un primer test para verificar que todo está configurado correctamente:

8.png

Y para ejecutarlo, abre un terminal dentro del Visual Studio Code:

9.png

Una vez en la consola escribe el comando: php vendor/phpunit/phpunit/phpunit tests

10.png

Y deberás ver en la salida:

11.png

Con esto tendrás todo lo necesario para avanzar a la próxima clase.

¡Nos vemos!

Aportes 48

Preguntas 2

Ordenar por:

Los aportes, preguntas y respuestas son vitales para aprender en comunidad. Regístrate o inicia sesión para participar.

Para los que le da el error:

PHP Fatal error:  Uncaught Error: Interface 'PHPUnit_Runner_TestSuiteLoader' not found in C:\xampp\php\pear\PHPUnit\Runner\StandardTestSuiteLoader.php:57
Stack trace:
#0 

Dentro de su phpunit.xml pongan:

<?xml version="1.0" encoding="UTF-8"?>
<phpunit bootstrap="vendor/autoload.php" colors="true">
    <testsuite name="Test directory">
        <directory>test</directory>
    </testsuite>
</phpunit>

Y lluego ejecutan el comando

composer dump

Soy nuevo en esto de PHP, pero noté que este error lo da el autoload, así que creí que reutilizando el xml de cursos anteriores y volviendolo a generar se arreglaría, y efectivamente.
Espero les sirva

La correcta sentencia para clonar el repositorio es:
git clone https://github.com/mchojrin/platzi-tdd

Para quienes les presente el siguiente error en consola:

[email protected]:~/Desktop/php/platzi-tdd$ php composer.phar install
Loading composer repositories with package information
Installing dependencies (including require-dev) from lock file
Your requirements could not be resolved to an installable set of packages.

  Problem 1
    - Installation request for phar-io/manifest 1.0.3 -> satisfiable by phar-io/manifest[1.0.3].
    - phar-io/manifest 1.0.3 requires ext-dom * -> the requested PHP extension dom is missing from your system.
  Problem 2
    - Installation request for phpunit/php-code-coverage 7.0.5 -> satisfiable by phpunit/php-code-coverage[7.0.5].
    - phpunit/php-code-coverage 7.0.5 requires ext-dom * -> the requested PHP extension dom is missing from your system.
  Problem 3
    - Installation request for phpunit/phpunit 8.2.2 -> satisfiable by phpunit/phpunit[8.2.2].
    - phpunit/phpunit 8.2.2 requires ext-dom * -> the requested PHP extension dom is missing from your system.
  Problem 4
    - Installation request for theseer/tokenizer 1.1.3 -> satisfiable by theseer/tokenizer[1.1.3].
    - theseer/tokenizer 1.1.3 requires ext-dom * -> the requested PHP extension dom is missing from your system.

  To enable extensions, verify that they are enabled in your .ini files:
    - /etc/php/7.3/cli/php.ini
    - /etc/php/7.3/cli/conf.d/10-opcache.ini
    - /etc/php/7.3/cli/conf.d/10-pdo.ini
    - /etc/php/7.3/cli/conf.d/20-calendar.ini
    - /etc/php/7.3/cli/conf.d/20-ctype.ini
    - /etc/php/7.3/cli/conf.d/20-exif.ini
    - /etc/php/7.3/cli/conf.d/20-fileinfo.ini
    - /etc/php/7.3/cli/conf.d/20-ftp.ini
    - /etc/php/7.3/cli/conf.d/20-gettext.ini
    - /etc/php/7.3/cli/conf.d/20-iconv.ini
    - /etc/php/7.3/cli/conf.d/20-json.ini
    - /etc/php/7.3/cli/conf.d/20-phar.ini
    - /etc/php/7.3/cli/conf.d/20-posix.ini
    - /etc/php/7.3/cli/conf.d/20-readline.ini
    - /etc/php/7.3/cli/conf.d/20-shmop.ini
    - /etc/php/7.3/cli/conf.d/20-sockets.ini
    - /etc/php/7.3/cli/conf.d/20-sysvmsg.ini
    - /etc/php/7.3/cli/conf.d/20-sysvsem.ini
    - /etc/php/7.3/cli/conf.d/20-sysvshm.ini
    - /etc/php/7.3/cli/conf.d/20-tokenizer.ini
  You can also run `php --ini` inside terminal to see which files are used by PHP in CLI mode.

Deben instalar las siguientes extensiones:

sudo apt-get install php-xml php-mbstring

En GitHub están tres archivos que me generaban incompatibilidad al momento de hacer las pruebas, estos archivos fueron composer.lock, composer.json y phpunit.xml. No sé si hice bien, pero los eliminé y luego ejecuté el comando

composer require phpunit/phpunit

Una vez instalado phpunit, todo me funcionó bien. (Es de aclarar que primero elimino los archivos y luego ejecuto el comando para proceder con la instalación)

Funcionó! en Windows 10

Tuve que eliminar los archivos compuser y phpunit que venian en el repositorio de Git ya que me salía un error “Class not found”. Al eliminar esos 3 archivos el test funcionó! Por si ayuda a alguien.

Yo tenía un error después de
composer install
y aún tratando las soluciones acá mencionadas, no podía arreglarlo, investigué un poco y con
sudo apt-get install php-xml
y luego con
php -m
para verificar que estaba ahí dom
Luego volví a ingresar
composer install
De esa manera pude resolver el error y el resultado en la terminal fue el esperado c: les dejo mi experiencia por si a alguien le pasa algo parecido.

Si tenéis Windows 10 Pro, recomiendo muchísimo utilizar el Subsistema de Windows para Linux (WSL), el cual se instala desde la Microsoft Store.
Es como tener una máquina virtual, pero sin tantas complicaciones, y si utilizas VSCode, aún es más sencillo, porque puedes decirle que trabajas como si estuvierar dentro del subsistema y la terminal te aparece como Linux (bash).

Si desean cambiar a linux, les recomiendo Fedora

Test.php

<?php

use PHPUnit\Framework\TestCase;

class Test extends TestCase {
    public function testTest()
    {
        $this->assertTrue(true);
    }
}

composer.json

{
    "name": "rubencalderongarcia/TDD",
    "description": "Proyecto de TDD",
    "autoload": {
        "psr-4": {
            "App\\": "src/"
        }
    },
    "require-dev": {
        "phpunit/phpunit": "^9"
    }
}

phpunit.xml

<?xml version="1.0" encoding="UTF-8"?>
<phpunit bootstrap="vendor/autoload.php" colors="true">
    <testsuite name="Test directory">
        <directory>tests</directory>

    </testsuite>

</phpunit>

Resultado en Terminal:

~/Documents/Platzi_2021/Buenas prácticas para la escritura de código(master*) » php vendor/phpunit/phpunit/phpunit
PHPUnit 9.5.1 by Sebastian Bergmann and contributors.

.                                                                   1 / 1 (100%)

Time: 00:00.013, Memory: 6.00 MB

OK (1 test, 1 assertion)
------------------------------

hola, cual es la opción mas recomendable para usar con Windows 10??

Debo descargar el codigo fuente? o el test package?

Debo bajar el archivo .zip o el debug pack o el development package?

Mil gracias por su orientación

Fué complejo pero pude.
Tengo Windows pero con WSL con Ubuntu 20.04 LTS
Los pasos sin errores fueron los siguientes:

git clone git@github.com:mchojrin/platzi-tdd.git
php -v
cd platzi-tdd
php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
php -r "if (hash_file('sha384', 'composer-setup.php') === '756890a4488ce9024fc62c56153228907f1545c228516cbf63f885e036d37e9a59d27d63f46af1d4d07ee0f76181c7d3') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"
php composer-setup.php
php -r "unlink('composer-setup.php');"
wget -O phpunit https://phar.phpunit.de/phpunit-8.phar
chmod +x phpunit
./phpunit --version
composer install --ignore-platform-reqs

crear el archivo php

<?php

use PHPUnit\Framework\TestCase;

class unTest extends TestCase {
    public function testTest()
    {
        $this->assertTrue(true);
    }
}

php vendor/phpunit/phpunit/phpunit tests```

![Capture.PNG](https://static.platzi.com/media/user_upload/Capture-f5264200-7467-4a13-8c28-09dcfc42a193.jpg)

Pueden instalar todas las dependencias necesarias SOLO! - abriendo la consola, y desde la ruta del proyecto escriben:

php composer.phar install

Con eso les debería instalar lo necesario. Para que no tengan que entrar a los links y se les dificulte la instalación de los paquetes.

Para las personas que no les permite descargar acá el link de repositorio https://github.com/mchojrin/platzi-tdd donde dice clonar o download y descargan el ZIP.

Una opcion para correr el comando de php unit un poco mas corta seria esta

vendor/bin/phpunit tests

No se puede descargar repositorio

Si les sale un error de actualización del PHPUnit, pueden probar lo siguiente:

composer remove phpunit/phpunit --dev
composer require phpunit/phpunit --dev

He tenido dificultades tratando de armar el entorno de pruebas usando windows

No sé si fue error mío, pero al hacer clone al repositorio no me trajo la carpeta vendor y cuando ejecuto “php vendor/phpunit/phpunit/phpunit tests” me aparece el error “Could not open input file: vendor/phpunit/phpunit/phpunit”. Les agradeceré cualquier tipo de ayuda 😄

Paso a paso 😳😳

Listo!

resultado

C:\laragon\www\platzi-tdd (master)
λ php vendor/phpunit/phpunit/phpunit
PHPUnit 8.2.2 by Sebastian Bergmann and contributors.



Time: 68 ms, Memory: 2.00 MB

No tests executed!

C:\laragon\www\platzi-tdd (master)
λ composer dump
Generated autoload files containing 566 classes

C:\laragon\www\platzi-tdd (master)
λ php vendor/phpunit/phpunit/phpunit tests
PHPUnit 8.2.2 by Sebastian Bergmann and contributors.

.                                                                   1 / 1 (100%)

Time: 70 ms, Memory: 4.00 MB

OK (1 test, 1 assertion)

C:\laragon\www\platzi-tdd (master)
λ composer dump

Todo Bien, pero al correr el comando php vendor/phpunit/phpunit/phpunit, me sale este error.
Algunos archivos no los consigue en mi directorio de PHP (Xammp). Alguien sabe de donde pudiera obtener estos archivos?
Gracias.

Webmaster@DESKTOP-T29PADC MINGW64 /d/xampp/htdocs/platzi-tdd (master)
$ php vendor/phpunit/phpunit/phpunit
PHP Fatal error:  Interface 'PHPUnit_Runner_TestSuiteLoader' not found in D:\xampp\php\pear\PHPUnit\Runner\StandardTestSuiteLoader.php on line 57

Fatal error: Interface 'PHPUnit_Runner_TestSuiteLoader' not found in D:\xampp\php\pear\PHPUnit\Runner\StandardTestSuiteLoader.php on line 57

Todo listo.

PHPUnit 3.7.21
me sale esto

Ademas recomiendo que usen linux o mac en windows es mas complicado

para que me saliera tuve que poner

php vendor/phpunit/phpunit/phpunit tests/*
PHPUnit 8.2.2 by Sebastian Bergmann and contributors.

. 1 / 1 (100%)

Time: 50 ms, Memory: 4.00 MB

listo!!

archivo unTest.php

<?php

use PHPUnit\Framework\TestCase;

class unTest extends TestCase {
    public function testTrue() {
        $this->assertTrue( true );
    }
}

Esta clase me ayudará mucho a proyectos futuros 😀👌

Intente hacer la instalación, sin embargo obtuve el siguiente error:

PHP Fatal error: Declaration of PHPUnit\Runner\StandardTestSuiteLoader::load($suiteClassName, $suiteClassFile = ‘’) must be compatible with PHPUnit\Runner\TestSuiteLoader::load(string $suiteClassName, string $suiteClassFile = ‘’): ReflectionClass in /usr/share/php/PHPUnit/Runner/StandardTestSuiteLoader.php on line 20

¿Alguién que pueda ayudarme? He buscado en foros, pero sólo he logrado confundirme más.

Muy detallado el tutorial. Me gustó.

Fatal error: Interface ‘PHPUnit_Runner_TestSuiteLoader’ not found in C:\xampp\php\pear\PHPUnit\Runner\StandardTestSuiteLoader.php on line 57
PS C:\xampp\htdocs\platzi-tdd>

Me sale este error al correr la consola en el visual code ayuda !!

perfecto

#Nice

Todo OK.

La última vez que intente instalar PHP me toco reinstalar Ubuntu jajajaja, esta vez salio bien.

Muy bien explicado el paso a paso.

Perfecto. Gracias

composer es un manejador de dependencias de PHP, lo correcto es usarlo siempre, PHPUnit es una dependencia igual, así que es igual una buena practica usar composer para PHP

Listo

Mmmm… Lo hare en Python

Agggghhhhhh eres curso es buenisimo!!! Pero usar Php lo lastra q_Q.

Hola, he intentado realizar el test pero me sale el mensaje " No tests executed", he googleado pero no encuentro la solucion

Alguien que me ayude por favor

Hola no se si alguien me puede ayudar?, me da el error que algunos han comentado abajo también.

Al ejecutar estos comandos, me envía el mismo error:

  • php vendor/phpunit/phpunit/phpunit
  • php vendor/phpunit/phpunit/phpunit tests

por aquí todo listo

<?php

use PHPUnit\Framework\TestCase;

class UnTest extends TestCase{
    public function testTest()
    {
        $this->assertTrue( true );
    }
}

Todo listo!