2012-11-05 20 views
8

Ben onun yöntemlerden birini this method described by the author of PHPUnit kullanarak a tek alay ve saplama çalışıyorum:PHPUnit stub yöntemi NULL döndürüyor?

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()); 
} 

sorun bu NULL her zaman döker olmasıdır. Anladığım kadarıyla, bir nesneyi alay ettiğinizde, yaptığım gibi açık bir şekilde belirtilmedikçe, tüm yöntemler NULL döndüren taslaklar ile değiştirilir. Yani, bar() yöntemini gömdüğümden, neden beklenen 'bar' dizgesini boşa harcamıyor? Neyi yanlış yaptım?

cevap

1

Bu, PHPUnit sürümümde bir sorun olmaktan çıktı. En son kararlı sürümle güncelledim ve sorunu kopyalayamadım.

1

Umarım bu yardımcı olabilir, bu benim sorunumun tüm kopyasıdır. İstenen 'çubuğu' yazdırır. Phpunit'in en son sürümlerini çalıştırdığınızı ve çalıştırdığım php'yi kontrol etmenizi öneririz:

PHPUnit 3.6.10 ve PHP 5.4.6-1ubuntu1.

PHPUnit 3.6.10 by Sebastian Bergmann. 

.string(3) "bar" 


Time: 0 seconds, Memory: 2.50Mb 

OK (1 test, 1 assertion) 

$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(){} 



} 

Çıktı Bu yararlı olduğunu umuyoruz.

3

Aynı sorunla karşılaştım, çünkü benim için sorun çağıran yöntemin orijinal nesne üzerinde mevcut olmadığı ve __call tarafından ele alındığı ortaya çıktı. Çözüm, şu gibi görünecek şekilde sona erdi:

$this->_foo->expects($this->any()) 
    ->method('__call') 
    ->with($this->equalTo('bar')) 
    ->will($this->returnValue('bar')); 
İlgili konular