2009-11-13 2 views
5

PHP와 PHPUnit에서 mock 객체를 생성하려고합니다. 지금까지,이 있습니다PHPUnit 모의 객체에서 여러 메소드 설정하기

분 내 무시 무시 모호한 개체 이름을 무시
$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); 

, 저는 제가했던 것은
것을 이해 - 구성하는 2 가지 방법으로, 모의 객체 생성
- 빈 배열을 반환하는 'get_events'메서드를 구성하고
- 모의을 생성자에 떨어 뜨렸습니다.

내가 지금하고 싶은 것은 두 번째 방법을 구성하는 것이지만, 어떻게하는지 설명 할 수는 없다. 뭔가를하고 싶습니다.

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

또는 그 중 일부는 작동하지만 작동하지 않습니다. 어떻게해야합니까?

테스트 할 메소드를 두 개 이상 구성해야하는 경우 코드가 잘못 구성되었음을 나타냅니다.

답변

9

나는 phpunit을 어떤 경험이없는,하지만 내 생각은 다음과 같이 될 것이다 :

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

이미 그것을 시도?


편집 :

:

좋아, 일부 코드 검색을 수행하여, 내가

체크 아웃 당신을 도울 수있는 몇 가지 예이 example

그들은 다음과 같이 사용 발견

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

어딘가에 문제가 있습니까?

도움이 될지 알려주세요.


Edit2가 :

당신이 시도 할 수 :

$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

나는 그것을 시도했고, 작동하지 않았다. –

+0

그것이 실제로 올바른 방법 인 것처럼 보입니다. 내 편집을 확인하십시오. 어쩌면 뭔가 다른게있을거야? 좀 더 완전한 코드를 공유한다면 아마 다른 사람이나 내가 도울 수있을 것입니다. –

+0

다시 시도해 보니 효과가있었습니다. 당신의 도움을 주셔서 감사합니다! –

관련 문제