2017-12-25 38 views
0

아래 예제에서 multipliedValue() 안에 getBaseValue()이라는 호출을 모의하고 싶습니다. 그러나 나는 그것을 알아낼 수 없다.PHPUnit : 테스트중인 메소드로 내부적으로 호출 된 함수를 모의하는 방법

class Sample 
{ 
    function multipliedValue() 
    { 
     $value = $this->getBaseValue(); 
     return $value * 2; 
    } 

    function getBaseValue() 
    { 
     return 2; 
    } 
} 

나는 PHPUnit 조롱을 사용했지만 작동하지 않았습니다.

class SampleTest extends PHPUnit_Framework_TestCase 
{ 
    function testMultipliedValueIfBaseValueIsFalse() 
    { 
     $mockedObject = $this->getMockBuilder(Sample::class) 
      ->setMethods(['multipliedValue', 'getBaseValue']) 
      ->getMock(); 
     $mockedObject->expects($this->any()) 
      ->method("getBaseValue") 
      ->willReturn(false); 
     $result = $mockedObject->multipliedValue(); 
     $this->assertFalse($result); 
    } 
} 

내가 전역 함수를 만들 수 있지만있는 그대로 나머지는 그냥 가서, 내 원하는 값을 반환하는 방법 중 하나를 강제로 시도 : 그래서, 나는 다음과 같은 코드를 사용했다. 이 시험에 어떻게 접근해야합니까?

현재 얻고있는 오류는 메서드에서 $this인데,이 메서드는 스텁 된 개체로 처리합니다. ->setMethods()에 나와

답변

1

모든 방법은 스텁 당신은 다음 할 getBaseValue 스텁 싶다면 기본적으로 null을 반환됩니다

$mockedObject = $this->getMockBuilder(Sample::class) 
     ->setMethods(['getBaseValue']) 
     ->getMock(); 
    $mockedObject->expects($this->any()) 
     ->method("getBaseValue") 
     ->willReturn(false); 
    $result = $mockedObject->multipliedValue(); 
    $this->assertFalse($result); 
+0

이 오류'정의되지 않은 메서드 SampleTest :: getBaseValue을 초래 하 ()'getBaseValue()는 내부적으로'multipliedValue()'함수에 의해 호출되기 때문에. –

+0

당신 말이 맞아요. 나는 이것을하는 데 실수를했다. 매우 감사합니다 –