2017-12-25 23 views
0

以下の例では、の中で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); 
    } 
} 

私は残りの部分は、ちょうど彼らがそうであるように行く、グローバル関数を作成しますが、唯一の私の目的の値を返すようにする方法の1を強制しようとしました。どのように私はこの試験に近づくべきですか?

私が現在取得中のエラーは、メソッドの$thisであり、スタブ付きオブジェクトとして扱われます。

答えて

1

->setMethods()に記載されているすべてのメソッドは、次に行うスタブとあなただけ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

あなたは正しいですか。私はこれをやって間違っていた。どうもありがとう –

関連する問題