Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial

Testing con Zend Framework

Come integrare il framework di test PHPUnit con Zend Framework per eseguire il testo delle applicazioni
Come integrare il framework di test PHPUnit con Zend Framework per eseguire il testo delle applicazioni
Link copiato negli appunti

Nella

lezione 7
abbiamo visto che nella struttura di un progetto ZF è predisposta una directory "tests" dedicata proprio a raccogliere gli unit test. Vediamo allora qualche esempio concreto di test e come possiamo eseguirli (per gli esempi che vedremo daremo per scontato un ambiente in cui sia già stato installato il framework PHPUnit).

Per testare in maniera indipendente ad esempio i model e i controller della nostra applicazione possiamo creare due sotto-directory in
/application/tests/ che chiameremo models e controllers e in cui andremo a posizionare i test relativi alle due componenti.

Chiaramente per testare completamente alcune funzionalità abbiamo bisogno di una configurazione di base per l'ambiente di testing, in cui ad esempio impostiamo alcuni importanti percorsi e alcune query
che ci possono tornare utili (ricordiamo che nel file application.ini abbiamo impostato un ambiente dedicato ai test, in cui ad esempio abbiamo sovrascritto le configurazioni della base di dati, per cui il database utilizzato per i test è diverso da quello utilizzato in produzione).

Nella directory tests creiamo dunque il file TestConfig.php in cui scriveremo una classe che avrà il compito di configurare l'ambiente di test. La classe potrebbe essere simile alla seguente:

<?php
TestConfig::setup();
class TestConfig {
		//configuriamo le directory principali
		static function setup() {
			$lib = realpath(dirname(__FILE__) .  '/../../../lib/');
			set_include_path(get_include_path() .  PATH_SEPARATOR . $lib);
			require_once dirname(__FILE__) .  '/../application/bootstrap.php';
			self::$bootstrap = new Bootstrap('test');
		}
//configurazione della base di dati
static function setupDb() {
		$db = Zend_Registry::get('db');
		$db->query(<<<EOT
			DROP TABLE IF EXISTS utenti;
			EOT
		);
		$db->query(<<<EOT
		CREATE TABLE `utenti` (
			`userid` int(11) NOT NULL auto_increment,
			`username` varchar(50) default NULL,
			`password` varchar(250) default NULL,
			`firstname` varchar(50) default NULL,
			`lastname` varchar(50) default NULL,
			`role` varchar(25) default NULL,
			`status` tinyint(2) default 0,
			PRIMARY KEY (`userid`)
		) DEFAULT CHARSET=utf8;
		EOT
		);
		$db->query(<<<EOT
		INSERT INTO utenti (username, password, firstname, lastname, role, status)
		VALUES  ('utente1', '12234', 'Utente1', 'Uno', 'admin', 1) ,
			 ('utente2', '23456', 'Utente2', 'Due', 'editore', 1),
			 ('utente3', '34567', 'Utente3', 'Tre', 'registrato', 1);
		EOT
		);
		[...]
}
}

L'idea fondamentale è in realtà molto semplice: lanciare un test in un ambiente pulito e sempre aggiornameto. Nella classe di configurazione quindi possiamo eliminare, ricreare e popolare ad ogni lancio del test le tabelle del database da verificare, in modo che l'ambiente parta sempre da un punto stabilito.
Ad esempio scriviamo il test per il model "Utente":

<?php
require_once dirname(__FILE__) . '/../TestConfig.php';
require_once '../application/models/Utente.php';
class models_UtenteTest extends PHPUnit_Framework_TestCase {
public function setUp() {
//impostiamo il database su una configurazione conosciuta
TestConfiguration::setupDatabase();
}
public function testFetchAll() {
//Creiamo una istanza del model "Utente"
$utentiModel = new Model_Utente();
//Eseguiamo una query
$utenti = $utentiModel->fetchAll();
//Eseguiamo il test sui risultati ottenuti
$this->assertSame( 3, $utenti->count() );
}
}

Il metodo setUp() possiamo utilizzarlo su ogni test per
inizializzare l'ambiente nel quale eseguire il test stesso, mentre il metodo
tearDown()viene eseguito alla fine di ogni test e dunque può essere utilizzato per ripulire ad esempio delle risorse che altrimenti
rimarrebbero inutilizzate per il sistema. Il nome della classe (models_UtentiTest)
rispecchia le classiche regole di naming di ZF, quindi visto che abbiamo create
la directory models per contenere i test sui modelli della nostra
applicazione, le classi che rientrano in questa categoria dovranno avere il
prefisso models_.

Per eseguire il test abbiamo bisogno della linea di comando (utilizziamo il nome del file se ci siamo posizionati direttamente nella directory che contiene il test, altrimenti possiamo utilizzare il nome assoluto del file), da cui lanciamo:

phpunit model_UtenteTest.php

Il test che abbiamo scritto verifica che tutto funzioni correttamente, eseguendo una semplice query su tutti gli utenti e
verificando che in effetti vi siano tre utenti nella nostra base di dati (proprio come ci aspettiamo visto che nella configurazione dell'ambiente di test dovremmo aver inserito le tre utente viste precedentemente). Il risultato del test sarà simile al seguente:

[...]
PHPUnit 3.4.11 by Sebastian Bergmann.
..
Time: 1 second, Memory: 4.75Mb
OK (1 tests, 1 assertion)
[...]

Ti consigliamo anche