2012-11-05 16 views
8

Sto cercando di prendere in giro un singleton utilizzando this method described by the author of PHPUnit e stub uno dei suoi metodi:PHPUnit metodo di stub che restituisce NULL?

public function setUp() { 
    $this->_foo = $this->getMockBuilder('Foo') 
     ->disableOriginalConstructor() 
     ->getMock(); 

    $this->_foo->expects($this->any()) 
     ->method('bar') 
     ->will($this->returnValue('bar')); 

    var_dump($this->_foo->bar()); 
} 

Il problema è che questo discariche NULL ogni volta. A quanto ho capito, quando prendi in giro un oggetto, tutti i metodi vengono sostituiti con stub che restituiscono NULL a meno che non venga esplicitamente cancellato come sto facendo. Quindi, dal momento che ho soppresso il metodo bar(), perché non si scarica la stringa 'bar' prevista? Cosa ho fatto di sbagliato?

risposta

1

Questo è risultato essere un problema con la mia versione di PHPUnit. Ho aggiornato all'ultima versione stabile e non sono riuscito a duplicare il problema.

1

Spero che questo possa aiutare, è la mia intera replica del tuo problema. Stampa la "barra" desiderata. Ti consiglio di controllare che tu stia utilizzando le ultime versioni di phpunit e php che corro:

PHPUnit 3.6.10 e PHP 5.4.6-1ubuntu1.

$suite = new PHPUnit_Framework_TestSuite("TestTest"); 


class Foo { 

    function Bar() 
    { 
     return null; 
    } 
} 

class TestTest extends PHPUnit_Framework_TestCase 
{ 
    private $test_max_prod; 
    private $initial; 

    public function setUp() { 
     $this->_foo = $this->getMockBuilder('Foo') 
      ->disableOriginalConstructor() 
      ->getMock(); 

     $this->_foo->expects($this->any()) 
      ->method('bar') 
      ->will($this->returnValue('bar')); 

     var_dump($this->_foo->bar()); 
    } 

    function tearDown() { 

    } 

    function testTest(){} 



} 

uscita

PHPUnit 3.6.10 by Sebastian Bergmann. 

.string(3) "bar" 


Time: 0 seconds, Memory: 2.50Mb 

OK (1 test, 1 assertion) 

Spero che questo è stato utile.

3

Mi sono imbattuto nello stesso problema, per me il problema si è verificato che il metodo che stavo invocando non esisteva sull'oggetto originale ed era gestito da __call. La soluzione è risultata simile a:

$this->_foo->expects($this->any()) 
    ->method('__call') 
    ->with($this->equalTo('bar')) 
    ->will($this->returnValue('bar')); 
Problemi correlati