Annotazioni del test
Le annotazioni determinano il modo in cui i test saranno gestiti dal test runner a riga di comando. Vengono scritte all'inizio del file di test.
Le annotazioni sono insensibili alle maiuscole e alle minuscole. Inoltre, non hanno alcun effetto se il test viene eseguito manualmente come un normale script PHP.
Esempio:
TEST
In realtà non è un'annotazione. Imposta solo il titolo del test che viene stampato in caso di fallimento o nei log.
@skip
Il test viene saltato. È utile per disattivare temporaneamente il test.
@phpVersion
Il test viene saltato se non viene eseguito dalla versione PHP corrispondente. Scriviamo l'annotazione come
@phpVersion [operator] version
. Si può omettere l'operatore, l'impostazione predefinita è >=
.
Esempi:
@phpExtension
Il test viene saltato se tutte le estensioni PHP menzionate non sono caricate. È possibile scrivere più estensioni in una singola annotazione, oppure utilizzare l'annotazione più volte.
@dataProvider
Questa annotazione è adatta quando si vuole eseguire il test più volte, ma con dati diversi. (Da non confondere con l'annotazione omonima per TestCase).
Scriviamo l'annotazione come @dataProvider file.ini
. Il percorso del file INI è relativo al file di test. Il test
viene eseguito tante volte quante sono le sezioni contenute nel file INI. Supponiamo che il file INI
databases.ini
:
e il file database.phpt
nella stessa directory:
Il test viene eseguito tre volte e $args
conterrà i valori delle sezioni mysql
,
postgresql
o sqlite
.
Esiste un'ulteriore variante quando si scrivono annotazioni con un punto interrogativo come
@dataProvider? file.ini
. In questo caso, il test viene saltato se il file INI non esiste.
Le possibilità di annotazione non sono state ancora menzionate tutte. È possibile scrivere condizioni dopo il file INI. Il test viene eseguito per la sezione indicata solo se tutte le condizioni corrispondono. Estendiamo il file INI:
e utilizzeremo l'annotazione con la condizione:
Il test viene eseguito solo una volta per la sezione postgresql 9.1
. Le altre sezioni non corrispondono alle
condizioni.
Allo stesso modo, si può passare il percorso a uno script PHP invece di INI. Deve restituire un array o un Traversable. File
databases.php
:
@multiplo
Si scrive come @multiple N
dove N
è un numero intero. Il test viene eseguito esattamente
N volte.
@testCase
L'annotazione non ha parametri. Si usa quando si scrive un test come classi TestCase. In questo caso, il test runner a riga di comando eseguirà i singoli metodi in processi separati e in parallelo in più thread. Questo può accelerare notevolmente l'intero processo di test.
@exitCode
Lo scriviamo come @exitCode N
dove N
is the exit code of the test. For example if
exit(10)
viene chiamato nel test, scriviamo l'annotazione come @exitCode 10
. Il test viene considerato
fallito se termina con un codice diverso. Il codice di uscita 0 (zero) è verificato se si tralascia l'annotazione
@httpCode
L'annotazione viene valutata solo se il binario PHP è CGI. Altrimenti viene ignorata. Si scrive come
@httpCode NNN
, dove NNN
è il codice HTTP atteso. Il codice HTTP 200 viene verificato se si omette
l'annotazione. Se si scrive NNN
come una stringa valutata come zero, per esempio any
, il codice HTTP non
viene verificato affatto.
@outputMatch a @outputMatchFile
Il comportamento delle annotazioni è coerente con le asserzioni Assert::match()
e
Assert::matchFile()
. Ma lo schema si trova nell'output standard del test. Un caso d'uso appropriato è quello in cui
si suppone che il test termini con un errore fatale e che sia necessario verificare il suo output.
@phpIni
Imposta i valori di configurazione INI per il test. Ad esempio, lo scriviamo come @phpIni precision=20
e funziona
come se avessimo passato il valore dalla riga di comando con il parametro -d precision=20
.