2013-02-12 10 views
5

Ho problemi con beffarda metodo genitore, questo è ad esempio:PHPUnit metodo genitore finto

class PathProvider 
{ 
    public function getPath() 
    { 
     return isset($_SERVER['REQUEST_URI']) ? $_SERVER['REQUEST_URI'] : '/'; 
    } 
} 


class Uri extends PathProvider 
{ 
    public function getParam($param) 
    { 
     $path = $this->getPath(); 

     if ($path == $param) 
      return 'OK'; 
     else 
      return 'Bad'; 
    } 
} 

e ora voglio metodo finta getPath(), e il metodo di chiamata getParam(), che recive valore preso in giro.

$mock = $this->getMock('PathProvider'); 

$mock->expects($this->any()) 
->method('getPath') 
->will($this->returnValue('/panel2.0/user/index/id/5')); 

Mi è stato scritto questa parte, ma non so come devo passare questo valore deriso al metodo di prova.

+2

penso che una riprogettazione potrebbe essere in ordine, un Uri non è un PathProvider, ha solo bisogno dei suoi servizi. – GordonM

+0

@GordonM ha pienamente ragione! Dovresti creare PathProvider come dipendenza e inserirlo nella classe Uri (tramite controller o setter). Non usare eccessivamente l'interemitanza – Cyprian

risposta

5

Hai solo bisogno di simulare classe Uri. Si può prendere in giro un solo metodo (getPath), così:

$sut = $this->getMock('Appropriate\Namespace\Uri', array('getPath')); 

$sut->expects($this->any()) 
    ->method('getPath') 
    ->will($this->returnValue('/panel2.0/user/index/id/5')); 

E poi è possibile verificare l'oggetto come di consueto:

$this->assertEquals($expectedParam, $sut->getParam('someParam')); 
+0

Quando chiamo metodo come dici che visualizzo l'errore: 'Chiama al metodo non definito Mock_Uri_b1cf6492 :: getParam()' –

+0

probabilmente hai dimenticato di aggiungere lo spazio dei nomi appropriato al metodo getMock. Guarda il mio esempio sopra (I'll edit answer) – Cyprian

+0

Nella mia app, ho lo spazio dei nomi corretto, ma ho sempre errori come sopra. –

4

Io ei miei amici scrivo Mockito come beffardo biblioteca. ouzo-goddies#mocking

$mock = Mock::create('\Appropriate\Namespace\Uri'); 
Mock::when($mock)->getPath()->thenReturn(result); 
Problemi correlati