Raggruppamento di test

SimpleTest for PHP test suites

# group Raggruppare i test in suite

Eistono molti sistemi per raggruppare i test in test suite. Uno di questi è quello di mettere semplicemente più test case in un singolo file: <strong><?php require_once(dirname(__FILE__) . '/simpletest/autorun.php'); require_once(dirname(__FILE__) . '/../classes/io.php'); class FileTester extends UnitTestCase { ... } class SocketTester extends UnitTestCase { ... } ?></strong> E' possibile mettere quanti test case si vuole in ogni file. Ogni file necessario all'esecuzione, come ad esempio la libreria da collaudare, dovrebbe essere incluso ma non è necessario includere alcuna libreria di SimpleTest.

Nel caso si sia estesa qualche test case da una classe base, anche questa deve essere inclusa. Qualsiasi classe di test non debba essere invocata deve essere marcata come abstract: <strong>abstract</strong> class MyFileTestCase extends UnitTestCase { ... } class FileTester extends MyFileTestCase { ... } class SocketTester extends UnitTestCase { ... } Qui, ad esempio, la classe `FileTester` non contiene alcun test ma viene utilizzata come classe base per altri case test.

Chiameremo questo file di esempio file_test.php. Il passo successivo è quello di creare il file della test suite che potremmo chiamare my_test_suite.php. Sono certo che saprai trovare nomi migliori di questo.

Adesso aggiungeremo il test file alla suite con un metodo sicuro: <?php require_once('simpletest/autorun.php'); require_once('file_test.php'); class AllFileTests extends TestSuite { function __construct() { parent::__construct(); $this->addFile('file_test.php'); } } ?> Quello che accadrà è che la classe `TestSuite` penserà autonomamente ad eseguire i `require_once()` necessari, controllerà se nuove classi di test case sono presenti nel file e all'occorrenza li aggiungerà alla test suite.

Questo metodo ci fornisce il massimo del controllo.

Nel caso questo metodo sembrasse troppo prolisso e si desiderasse di raggruppare tra loro più test suite di una stessa directory oppure in base al loro nome del file, esiste un metodo ancora più automatico: <?php require_once('simpletest/autorun.php'); class AllFileTests extends TestSuite { function __construct() { parent::__construct(); $this->collect(dirname(__FILE__) . '/unit', new SimplePatternCollector('/_test.php/')); } } ?> Questo sistema ricerca nella directory "unit" i file il cui nome termina per "_test.php" e li carica. L'uso di `SimplePatternCollector` per filtrare in base ad un pattern non è obbligatorio ma è il sistema più comune.

Tutto quel che resta da fare adesso è creare un file nella directory dei test case che lancerà lo script della test suite.

I test case caricati con il metodo `addFile` posseggono alcune utili proprietà. Si ha la certezza che il costruttore sia invocato prima del lancio del primo test e il distruttore dopo l'esecuzione dell'ultimo. Questo consente di ospitare nel costruttore e nel distruttore il codice di set up e di tear down che deve valere per tutto il test case.

# higher Suite composite

Il metodo appena presentato prevede di ospitare tutti i test case in un'unica grande test suite. Per progetti di grandi dimensione, tuttavia, questo metodo non risulta abbastanza flessibile perché si potrebbe desiderare di raggrupare test nelle più varie modalità.

Per poter disporre di un group test più flessibile è possibile istanziare una classe che erediti da `TestSuite`: <?php require_once('simpletest/autorun.php'); <strong> class BigTestSuite extends TestSuite { function __construct() { parent::__construct(); $this->addFile('file_tests.php'); } }</strong> ?> In questo modo si è aggiunta una test suite dentro un'altra. In questo caso non risulta molto utile ma è possibile aggiungere altre suite a piacimento. E' perfino possibile mescolare gruppi e singoli test case a patto di prestare attenzione alle inclusioni multiple. <?php require_once('simpletest/autorun.php'); class BigTestSuite extends TestSuite { function __construct() { parent::__construct(); $this->addFile('file_tests.php'); <strong>$this->addFile('some_other_test.php');</strong> } } ?> Nel caso si includa un file più di una volta, verrebbe eseguita solo la prima istanza del test.

Different ways to group tests together. Combining group tests into larger groups.
SimpleTest project page on SourceForge. SimpleTest download page on LastCraft.
php unit testing, test integration, documentation, marcus baker, simpletest, simpletest documentation, phpunit, pear