Phpunit esempio

Questo è un piccolo esempio di testing di Phpunit.
Per installare qui c’è la guida dal sito ufficiale (link).

<?php
  class Sum
  {
    private $total;
    private $timeAdd;

    public function __construct($config = []) {
         $this->total = 0;
         $this->timeAdd = 0;
    }

    public function add($Value)
    {
      if(!is_numeric($Value))
        throw new Exception('Value is not numeric');

      $this->total += $Value;
      $this->timeAdd++;
    }

    public function getTotal()
    {
      return $this->total;
    }

    public function getMedia()
    {
      if($this->timeAdd==0)
        throw new Exception('timeAdd equal zero');
      return ($this->total/$this->timeAdd);
    }
  }
 ?>

Per il codice di testing:

<?php
use PHPUnit\Framework\TestCase;

final class classSumTest extends TestCase
{
    public function testTotalAndMedia(): void
    {
        require "classSum.php";
        $A = new Sum;
        $this->assertEquals($A->getTotal() , 0);
        $A->add(5);
        $this->assertEquals($A->getTotal() , 5);
        $this->assertEquals($A->getMedia() , 5);
        $A->add(15);
        $this->assertEquals($A->getTotal() , 20);
        $this->assertEquals($A->getMedia() , 10);

    }

    public function testTotalMediaWithIteration(): void
    {
        $B = new Sum;
        for($i=0;$i<10;$i++)
        {
          $B->add(1);
          $this->assertEquals($B->getTotal() , $i+1);
          $this->assertEquals($B->getMedia() , 1);
        }
    }

    public function testErrorOfAdd(): void
    {
      $A2 = new Sum;
      $this->expectException(Exception::class);
      $A2->add("Test");
    }
    public function testErrorOfMedia(): void
    {
      $A2 = new Sum;
      $this->expectException(Exception::class);
      $A2->getMedia();
    }

}