phpunit:如何通过测试的方法模拟内部称为函数



在下面的示例中,我想在multipliedValue()内模拟getBaseValue()的调用。但是我无法弄清楚。

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

最新更新