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).

...

Reg铆strate o inicia sesi贸n para leer el resto del contenido.

Aportes 53

Preguntas 3

Ordenar por:

驴Quieres ver m谩s aportes, preguntas y respuestas de la comunidad?

o inicia sesi贸n.

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:

romero@romero:~/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)

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

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

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 鈥淐lass 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.

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)

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

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

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

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

Si est谩s en Windows puedes seguir estos pasos:
.

  1. Descarga Composer desde: https://getcomposer.org/download/
  2. Ub铆cate en la ra铆z de tu proyecto y crea un archivo composer.json.
{
    "autoload": {
        "psr-4": {
            "": "src/"
        }
    },
    "require-dev": {
        "phpunit/phpunit": "^9.0"
    }
}
  1. Ejecuta el comando:
    composer install --dev


4. Crea una carpeta tests al mismo nivel que la carpeta vendor.
5. Crea dentro de tests un archivo de prueba FirstTest.php.

<?php
use PHPUnit\Framework\TestCase;

require_once __DIR__ . '/../Calculator.php'; // Esto es necesario para cargar la clase Calculator

class FirstTest extends TestCase {
    public function testAdd() {
        $calculator = new Calculator(); // Ahora PHPUnit puede encontrar la clase

        $result = $calculator->add(2, 3);
        $this->assertEquals(5, $result);
    }
}
  1. Crea la clase Calculator.php fuera de la carpeta tests.
<?php
class Calculator {
    public function add($a, $b): int {
        return $a + $b;
    }
}
  1. En mi caso la raiz de mi proyecto es una carpeta llamada phpUnit, quedando de la siguiente manera:

.

8. Estando en la ra铆z ejecutamos el comando:
composer dump-autoload y tamb铆en php vendor/bin/phpunit tests.

.

.

Esta es una forma para utilizar phpUnit ^9.0 en 2023, no es tal cual la versi贸n utilizada en el curso pero funciona con PHP ^8.0.

A fecha 12 de agosto de 2023, veo que tanto los archivos como la explicaci贸n se encuentran bastante antiguos, lo que hace que existan algunos inconvenientes a la hora de realizar el ejercicio, por lo que es necesario o bien revisar los cursos o dejarlos un poco m谩s gen茅ricos para poderlos llevar a cabo en cualquier momento. Fue necesario realizar investigaci贸n directa a la p谩gina de PHPunit para poder realizar la correcta configuraci贸n del entorno.

Para el 2023:

Eliminen el composer.lock y ejecuten:

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

Usar en el phpUnit.xml el siguiente c贸digo:

<phpunit
        xmlns:xsi=
        xsi:noNamespaceSchemaLocation=
        backupGlobals="false"
        backupStaticAttributes="false"
        colors="true"
        convertErrorsToExceptions="true"
        convertNoticesToExceptions="true"
        convertWarningsToExceptions="true"
        processIsolation="false"
        stopOnFailure="false"
        bootstrap="vendor/autoload.php"
>
        <testsuites>
                <testsuite name="My Test Suite">
                        <directory suffix="Test.php">./tests</directory>
                </testsuite>
        </testsuites>
        <php>
                <ini name="error_reporting" value="E_ALL | E_STRICT" />
        </php>
</phpunit>

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

Recuerden que para que el phpunit 鈥渉aga鈥 el test, su archivo con la prueba debe de tener en el nombre la palabra 鈥淭est鈥 con t may煤scula, sino no lo ejecuta.

Recordaba de clases pasadas en php que ten铆a que llamarse test, pero no que ten铆a que ser Test.

en el 2022, da error en windows al hacer:

composer install

para eso, simplemente cambi茅 en el composer.json la l铆nea requiere por esto:

"require": {
    "phpunit/phpunit": "^8.2.2"
  },

Y ya deja instalar con compose install

No se puede descargar repositorio

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 鈥減hp vendor/phpunit/phpunit/phpunit tests鈥 me aparece el error 鈥淐ould 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 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 鈥楶HPUnit_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.

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!