No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

Continuando nuestro proyecto

16/19
Recursos

Aportes 26

Preguntas 9

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

En esta clase se mencionó algo muy importante, y es el tipo de dato que se espera, cuando trabajamos con parámetros en las funciones es posible especificar qué tipo de dato estamos esperando, esto hace que sea un código mejor estructurado y te acerca más a las buenas prácticas, de igual manera, los métodos de las clases pueden especificar qué tipo de dato se va a retornar, así le confirmamos 100% a quien use nuestra clase que vamos a retornarle si o si tal tipo de dato, por ejemplo, en esta clase:

<?php

namespace App;

class Comment {

    public $like_count = 0;

    public function like(User $usuario) : int {
        return $this->like_count;
    }
    
}


?>

Vemos que hay un método que espera como parámetro “User $usuario”, esto quiere decir que, el parámetro $usuario tiene que ser si o si una instancia de la clase Usuario, si yo reemplazara “User” por “string” le estarían diciendo que espero que el parámetro $usuario sea una cadena de texto.

De igual manera, es función tiene al final " : int" esto está diciendo que el método va a devolver si o si un entero, de esta manera podemos hacer un código más robusto y a prueba de errores.

Si te te sale un error: Error: Class ‘App\Post’ not found a pesar de haber creado la clase y el namespace, ejecuta composer dump-autoload, esto hara que la clase que sea reconocida por el autoload y no mostrara el previo error.

Hola, en mi caso al configurar phpunit en composer utilizó la versión 10.0 y para realizar los test no funcionan con el comando:

vendor/phpunit/phpunit/phpunit

Revisando la documentación se debe usar:

vendor/bin/phpunit

y con ello pude seguir la clase.

Cuando ya se tiene mas practica y mas conocimiento en el desarrollo de software, siempre te vas a ir por escribir codigo primero y luego los tests, con esto quiero decir que, aunque en la teoria sea lo contrario, esta es la realidad

🔮 Quieres optimizar tu tiempo de desarrollo y garantizar la calidad del código entonces es momento de utilizar TDD.

Hasta ahora ha sido la mejor explicación de TDD para PHP. Muchas gracias profe!

Haciendo el curso en marzo del 2024, al ejecutar el comando php vendor/phpunit/phpunit/phpunit no pasa nada, buscando en la documentación y con ayuda de otros comentarios llegue a una solución por lo menos con la version 10.5.15 que es la que estoy usando: se debe ejecutar el comando php vendor/bin/phpunit tests/PostTest.php Espero que les sea de ayuda

Hola me genera este error:

There was 1 error:

1) PostTest::test_add_comment_to_post
Error: Class 'App\Post' not found

C:\xampp\htdocs\Data\PHP\CursoPlatzi\POO\Proyecto\tests\PostTest.php:10

La linea 10 hace referencia a $post = new Post();

use PHPUnit\Framework\TestCase;
use App\Post;
use App\Comment;

class PostTest extends TestCase {
  
  public function test_add_comment_to_post(){
    $post = new Post(); //Se crea un post aqui es el error
    $comment = new Comment(); //Se crea un comentario

    $post->addComment($comment); //Ese comentario se agrega al post

    $this->assertEquals(1, $post->countComments()); //
    $this->assertInstanceOf(Comment::class, $post->getComments()[0]); //Si esta instanciado, correcto
  }
}

¿Alguien más tuvo este error?

No entiendo que esta haciendo

Hice una calculadora utilizando POO, a la cuál le hice testing. Aquí el código:

maths/Calculator.php:

<?php 

namespace App\Maths; 

class Calculator{

    protected $num1; 
    protected $num2; 

    public function __construct($num1, $num2)
    {   
        $this->num1 = $num1; 
        $this->num2 = $num2; 

    }

    public function getAdditionResult(){
        return ($this->num1 + $this->num2);
    } 

    public function getSubtractionResult(){
        return ($this->num1 - $this->num2);
    } 

    public function getMultiplicationResult(){
        return ($this->num1 * $this->num2);
    } 

    public function getDivisionResult(){
        return ($this->num1 / $this->num2);
    } 

}

CalculatorTest.php:

<?php 

use PHPUnit\Framework\TestCase; 
use App\Maths\Calculator; 


class CalculatorTest extends TestCase{
    
    public function test_addition(){
        $calculator = new Calculator(3, 2); 

        $this->assertEquals(5, $calculator->getAdditionResult()); 
        $this->assertEquals(1, $calculator->getSubtractionResult()); 
        $this->assertEquals(6, $calculator->getMultiplicationResult()); 
        $this->assertEquals(1.5, $calculator->getDivisionResult()); 
    }

}

Result:

Excelente clase, aquí el problema es hacer el switch del mindset de desarrollo estandar a TDD, me encanta la idea, pero no es fácil.
No sabia que se podia asignar el mismo namespace a varios archivos, super

Hola!, queria saber si alguien me podría ayudar porque a mi simplemente no se me ejecutan las pruebas.

Post.php

<?php

    namespace App;

    class Post{ // Resuelve el error de la línea 11

        protected $comments = [];

        public function addComment(Comment $comment){ // Resuelve el error de la línea 13
            $this->comments[] = $comment;
        }

        public function countComments(){ // Resuelve el error de la línea 16
            return count($this->comments);
        }

        public function getComments(){ // Resuelve el error de la línea 17
            return $this->comments;
        }
    }



?>

tengo este error. ayuda.

Para correr test de manera simple hay una extensión para VSC llamada PHPUnit - Run PHPUnit tests from VSCode.

Realice un test para contar el número de likes que tiene un comentario

CommentTest.php

<?php

use PHPUnit\Framework\TestCase;

use App\Comment;
use App\User;

class CommentTest extends TestCase
{
    public function testCountLikesToComment()
    {
        $comment = new Comment();

        $user = new User();
        $comment->addLike($user);

        $this->assertEquals(1, $comment->countLikes());
        $this->assertIsInt($comment->countLikes());

    }
}

Estado Inicial del test

Comment.php

<?php

namespace App;

class Comment {

    protected $like = 0;

    public function addLike(User $user)
    {
        $this->like++;
    }

    public function countLikes()
    {
        return $this->like;
    }

}

Resultado

Hay que mencionar que debemos crear la clase User para que funcione

En tiempo real te ayudan muchísimo las extensiones PHP Intellephanse y ErrorLens para VSCode!

Si no te muestra el test

$ vendor/phpunit/phpunit/phpunit

Tendrás que ejecutarlo directo al folder/file, esto sucede con la última versión de composer y phpunit:

$ vendor/phpunit/phpunit/phpunit --colors=always tests

ó

$ vendor/phpunit/phpunit/phpunit --colors=always tests/PostTest.php
<?php

use PHPUnit\Framework\TestCase;
use APP\{Post, Comment};

class PostTest extends TestCase
{
    public function testAddCommentToPost(){
        $post = new \Post();
        $comment = new \Comment();
        $post->testAddComment($comment);

        $this->assertEquals(1,$post->countComments());
        $this->assertInstanceOf(Comment::class, $post->getComments()[0]);
    }
}

Test Driven Development (TDD) es una metodología de ingeniería de software que asegura software de mayor calidad y en menos tiempo.

Excelente clase, sobre TDD usando PHPUnit.

PHP Unit literalmente me hará un mejor programador porque me advierte cuando olvido los ‘;’ o ‘[]’ 😂

InstanceOf

this Is amazing! :)