2013-06-05 5 views
6

È possibile aggiungere una costante di classe a un mock utilizzando PHPUnit?Aggiungi costante a un simulatore in PHPUnit

Ecco un esempio:

class SomeTest extends PHPUnit_Framework_TestCase { 
    public function setUp() { 
     $mock = $this->getMock('SomeClass'); 
     // Here I'd like to add a constant to $mock; something like 
     // $mock::FOOBAR; 
    } 
} 

Se uno qualsiasi di voi sa come posso ottenere questo behavious per funzionare?

Thx!

+0

La classe Reflection avrebbe realizzato ciò che volevi? http://php.net/manual/en/book.reflection.php –

risposta

2

Questa domanda è stata intorno un po 'senza risposte, ma mi sono imbattuto in questo stesso problema. Questo non sembra possibile; tuttavia, c'è almeno una sporca work-around:

Nel file di test

<?php 

class SomeClass { 
    const FOOBAR = 'foobar'; 
} 

class SomeTest extends PHPUnit_Framework_TestCase { 
    public function setUp() { 
     $mock = $this->getMock('SomeClass'); 
    } 
} 

// tests 

?> 

Poi, si utilizza l'oggetto preso in giro per la funzionalità deriso, e si utilizza la classe costante allo stesso modo si avrebbe in origine . Per esempio:

// Call a method on mocked object 
// (would need to add this method to your mock, of course) 
$mock->doSomething(); 
// Use the constant 
$fooBar = SomeClass::FOOBAR; 

Questa è sporca, quindi sono sicuro che le cose potrebbero ottenere abbastanza incasinato se si sta utilizzando una sorta di caricamento automatico che cerca di caricare la classe reale SomeClass, ma questo funzionerà "bene" se non stai caricando l'originale SomeClass.

Sono decisamente interessato ad ascoltare altre soluzioni oltre a ricevere un feedback su quanto sia veramente sporco.

+0

Probabilmente 'SomeClass' dovrebbe essere dichiarato come **' class SomeClassMock estende SomeClass' ** affinché questo approccio funzioni come previsto e 'SomeClass' non dovrebbe essere "finale" nella sua essenza. –