簡體   English   中英

PHPUnit:如何通過被測方法模擬內部調用的函數

[英]PHPUnit: How to mock an internally called function by the method under test

在下面的例子中,我想嘲弄的呼叫getBaseValue()multipliedValue() 但我無法弄清楚。

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

我試圖創建一個全局函數,但是僅強制其中一種方法返回我想要的值,其余方法照原樣進行。 我應該如何進行這項測試?

我當前遇到的錯誤是multipliedValue()方法中的$this ,將其視為存根對象。

->setMethods()列出的所有方法都將被存根,並且默認情況下返回null ,因此,如果您只想存根getBaseValue請執行以下操作:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM