2011-12-07 2 views
16

Sto usando PHPUnit per l'unità testare le mie funzioni ogni volta che viene visualizzato un avviso che lo script di test non verrà eseguito per tali funzioni, qualcuno può dirmi come ignorare gli avvertimenti e procedere con i testIgnorare gli avvisi PHP in PHPUnit

+10

Mi sembra che il test unità funziona come dovrebbe. Correggere il codice in modo che non presenti avvisi o errori. – JJJ

+0

@Juhana: Mi serve solo il valore restituito della funzione Non sono interessato agli avvisi. La funzione che sto testando funziona correttamente. –

+1

In un contesto di lavoro di squadra, a volte devi testare il tuo bundle e non hai tempo/credenziali/missione per pulire gli altri bundle (che potrebbero lanciare avvertimenti solo perché esistono anche non chiamati), quindi "Correggi codice "il commento sembra non pertinente quando si vuole semplicemente testare una funzione specifica. – Xmanoux

risposta

28

Come commentato da Juhana, è necessario prima di tutto correggere il codice in cui appaiono gli avvertimenti. È un segno che il codice non funziona correttamente/rigorosamente.

Per impostazione predefinita, PHPUnit converte errori, avvisi e avvisi PHP che vengono attivati ​​durante l'esecuzione di un test a un'eccezione.

Vedi Testing PHP Errors che ha più informazioni come prova per le avvertenze (e come ignorare gli avvisi di sub-routine che voi chiamate nei test).

Per disabilitare il comportamento predefinito, è possibile indicare a PHPUnit di farlo nei test, ad es. all'interno del setUp del test o la stessa prova impostando una variabile statica nel namespace globale:

# Warning: 
PHPUnit_Framework_Error_Warning::$enabled = FALSE; 

# notice, strict: 
PHPUnit_Framework_Error_Notice::$enabled = FALSE; 

Un'altra opzione per modificare il comportamento predefinito è quello di configure the testrunner with an XML file con le seguenti impostazioni:

<phpunit convertErrorsToExceptions="false" 
     convertNoticesToExceptions="false" 
     convertWarningsToExceptions="false"> 
</phpunit> 

Questi tre opzioni non sono disponibili come opzioni della riga di comando.

Vedere anche la domanda correlata: test the return value of a method that triggers an error with PHPUnit.

+0

grazie funziona con "# notice, strict: PHPUnit_Frame_Notice :: $ enabled = FALSE; " –

+2

Ho provato a usarlo per testare alcune operazioni sui file con vfsStream. Disabilitare le eccezioni PHP_Unit non ha funzionato (necessario a causa di alcuni chmod() che non sono supportati). Dopotutto devo usare il buon vecchio silenzio operatore '@'. – Zap

2

La strategia documentata per eseguire questa operazione a livello di test consiste nell'utilizzare l'operatore di soppressione degli errori @ quando il test chiama la funzione che attiva un avviso o avviso.

Il codice che segue è l'esempio dalla PHPUnit documentation:

<?php 
class ErrorSuppressionTest extends PHPUnit_Framework_TestCase 
{ 
    public function testFileWriting() { 
     $writer = new FileWriter; 
     $this->assertFalse(@$writer->write('/is-not-writeable/file', 'stuff')); 
    } 
} 
class FileWriter 
{ 
    public function write($file, $content) { 
     $file = fopen($file, 'w'); 
     if($file == false) { 
      return false; 
     } 
     // ... 
    } 
}