2012-10-03 20 views
11

PHPUnit esegue il metodo setUp() di una classe di test prima di eseguire un test specifico.PHPUnit: ottieni il nome della classe di test e il metodo da setUp()?

Carico dispositivi di prova specifici per ogni test in una classe di test e preferirei non doverlo fare esplicitamente. Preferirei maneggiare questo automagicamente nel metodo setUp().

Se il metodo setUp() rende disponibili il nome della classe di test e il nome del metodo di prova, è possibile farlo.

Il nome della classe di test e il metodo che si sta per eseguire sono disponibili nel metodo setUp()?

risposta

26

Il modo più semplice per ottenere questo dovrebbe essere chiamando $this->getName() in setUp().

<?php 

class MyTest extends PHPUnit_Framework_TestCase 
{ 
    public function setUp() { 
     var_dump($this->getName()); 
    } 


    public function testMethod() 
    { 
     $this->assertEquals(4,2+2,'OK1'); 
    } 
} 

e funzionante:

phpunit MyTest.php 

produce:

PHPUnit 3.7.1 by Sebastian Bergmann. 

.string(10) "testMethod" 


Time: 0 seconds, Memory: 5.00Mb 

OK (1 test, 1 assertion) 

In generale mi piacerebbe consiglio contro questo modo, ma ci sono certi casi in cui può essere un bel modo fare cose.

Altre opzioni dovrebbero avere più di una classe di test e tutti i test che utilizzano gli stessi dispositivi insieme in una classe.

Un altro sarebbe disporre di helper setUp privati ​​e chiamare il caso appropriato dal caso di test.

+1

@ Jon-CRAM al fine di ottenere il nome della classe di test corrente , 'PHPUnit' stesso usa [get_class ($ this)] (http://php.net/manual/en/function.get-class.php) per ottenere il nome della classe inclusa la parte namespace – xmojmr

1

In alternativa, se non si vuole mostrare la parte string(10) come nella risposta di edorian si può fare in questo modo:

protected function setUp() 
{ 
    echo $this->getName() . "\n"; 
} 
Problemi correlati