2009-11-13 22 views
5

PHP ve PHPUnit'te sahte bir nesne oluşturmaya çalışıyorum. Şimdiye kadar, bu var:PHPUnit sahte nesnelerde birden fazla yöntem yapılandırma

dakika bile iğrenç belirsiz nesne adlarını göz ardı edilmesi
$object = $this->getMock('object', 
         array('set_properties', 
           'get_events'), 
         array(), 
         'object_test', 
         null); 

$object 
    ->expects($this->once()) 
    ->method('get_events') 
    ->will($this->returnValue(array())); 

$mo = new multiple_object($object); 

, ne yaptığım
olduğunu anlamak - yapılandırmak için 2 yöntemleri ile, sahte nesne düzenlendi
- Boş bir dizi döndürmek için 'get_events' yöntemini yapılandırdı ve
- Sahneyi yapıcıya bıraktı.

Şimdi yapmak istediğim, ikinci yöntemi yapılandırmak, ancak bunun nasıl yapılacağını açıklayan bir şey bulamıyorum. Ben

$object 
    ->expects($this->once()) 
    ->method('get_events') 
    ->will($this->returnValue(array())) 
    ->expects($this->once()) 
    ->method('set_properties') 
    ->with($this->equalTo(array())) 

ya da bazı tür gibi bir şey yapmak istiyorum, ama bu işe yaramaz. Bunu nasıl yapmalıyım?

Test etmek için birden fazla yöntem yapılandırmam gerekirse, bu kodumu hatalı yapılandırdığımı gösteriyor mu?

cevap

9

Ben PHPUnit ile herhangi bir deneyimi yok ama benim tahminim böyle bir şey olurdu:

$object 
    ->expects($this->once()) 
    ->method('get_events') 
    ->will($this->returnValue(array())); 
$object 
    ->expects($this->once()) 
    ->method('set_properties') 
    ->with($this->equalTo(array())); 

Zaten denediniz mi?


Düzenleme:

:

Tamam, bazı kod arama yaparak, ben

Kontrol dışarı size yardımcı olabilecek bazı örnekler bu example

Onlar bu gibi kullanmak bulundu

public function testMailForUidOrMail() 
{ 
    $ldap = $this->getMock('Horde_Kolab_Server_ldap', array('_getAttributes', 
                  '_search', '_count', 
                  '_firstEntry')); 
    $ldap->expects($this->any()) 
     ->method('_getAttributes') 
     ->will($this->returnValue(array (
             'mail' => 
             array (
              'count' => 1, 
              0 => '[email protected]', 
            ), 
             0 => 'mail', 
             'count' => 1))); 
    $ldap->expects($this->any()) 
     ->method('_search') 
     ->will($this->returnValue('cn=Gunnar Wrobel,dc=example,dc=org')); 
    $ldap->expects($this->any()) 
     ->method('_count') 
     ->will($this->returnValue(1)); 
    $ldap->expects($this->any()) 
     ->method('_firstEntry') 
     ->will($this->returnValue(1)); 
(...) 
} 

Belki de sorununuz başka bir yerdedir?

Yardım ederse bana bildirin.


Edit2:

Bunu deneyebilir miyim:

$object = $this->getMock('object', array('set_properties','get_events')); 

$object 
    ->expects($this->once()) 
    ->method('get_events') 
    ->will($this->returnValue(array())); 
$object 
    ->expects($this->once()) 
    ->method('set_properties') 
    ->with($this->equalTo(array())); 
+0

Bunu deneyin yaptım ve o iş gibi görünmüyordu. –

+0

Gerçekten doğru yol gibi görünüyor. Düzenlememi kontrol et. Belki başka bir şey yanlış var? Daha eksiksiz bir kod parçası paylaşırsanız, belki başkalarına da yardım edebilirim. –

+0

Tekrar denedi ve işe yaradı. Yardım ettiğin için teşekkür ederim! –