venerdì, agosto 30, 2013

PHP - Unit testing


Questo post fa parte di una serie preparata qualche anno fa per delle lezioni su PHP.
Adesso consiglierei di usare PHPUnit anziché Lime.

Unit testing

La pratica della predisposizione dei test unitari (unit testing) permette di semplificare le modifiche, semplificare l'integrazione e supportare la documentazione. Buoni motivi per adottarla...

Lime

Lime fa parte del framework Symfony, ma può essere utilizzato anche in maniera isolata. Documentazione al riguardo è rintracciabile nelle pagine del progetto (la guida rimane valida per quanto riguarda Lime, anche se la versione Symfony 1.2 è deprecata). Il codice di Lime è disponibile nel deposito SVN di Symfony.

Uso di Lime

Un semplice esempio di partenza di unit test con Lime è il seguente:

<pre>
<?php
require('../../lib/lime.php');
// impostare il percorso a seconda di dov'è il file

ini_set('error_reporting', E_ALL);

function __autoload($className)
{
    $filename=$className.'.class.php';
    include($filename);
}

$t=new lime_test(4, new lime_output_color());

$calculator = new Calculator();

$t->cmp_ok($calculator->getOperand(0), '===', false, '->getOperand() returns false for an unitialized value');

$t->isa_ok($calculator->setOperand(0,10), 'Calculator', '->setOperand() returns a Calculator object');

$t->is($calculator->getOperand(0), 10, '->getOperand() returns the correct value for an initialized value');

try
{
    $calculator->setOperator('_');
    $t->fail('->setOperator() allows a non valid operator');
}
catch (Exception $e)
{
    $t->pass('->setOperator() throws an exception with a non valid operator');
}


L'output dovrebbe assomigliare al seguente:
1..4
ok 1 - ->getOperand() returns false for an unitialized value
ok 2 - ->setOperand() returns a Calculator object
ok 3 - ->getOperand() returns the correct value for an initialized value
ok 4 - ->setOperator() throws an exception with a non valid operator
# Looks like everything went fine. 

Esercizio

Modificare la classe Calculator aggiungendo nuove funzioni membro e predisporre i relativi test.

Nessun commento:

Posta un commento