dongsong73032 2017-12-25 12:23
浏览 172
已采纳

PHPUnit:如何通过测试方法模拟内部调用的函数

In the below example, I want to mock the calling of getBaseValue() inside the multipliedValue(). But I cannot figure it out.

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

    function getBaseValue()
    {
      return 2;
    }
}

I have used PHPUnit mocking, but it didn't work. So, I used the following code:

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

I tried to create a global function, but only force one of the method to return my desired value, the rest just go as they are. How should I approach this test?

The error I am currently getting is for the $this in the multipliedValue() method, which treats it as the stubbed object.

  • 写回答

1条回答 默认 最新

  • donglu6303 2017-12-25 12:43
    关注

    All the methods listed in the ->setMethods() will be stubbed and return null by default so if you only want to stub getBaseValue then do:

    $mockedObject = $this->getMockBuilder(Sample::class)
            ->setMethods(['getBaseValue'])
            ->getMock();
        $mockedObject->expects($this->any())
            ->method("getBaseValue")
            ->willReturn(false);
        $result = $mockedObject->multipliedValue();
        $this->assertFalse($result);
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 java代码写在记事本上后在cmd上运行时无报错但又没生成文件
  • ¥15 关于#python#的问题:在跑ldsc数据整理的时候一直抱这种错误,要么--out识别不了参数,要么--merge-alleles识别不了参数(操作系统-linux)
  • ¥15 PPOCRLabel
  • ¥15 混合键合键合机对准标识
  • ¥100 现在不懂的是如何将当前的相机中的照片,作为纹理贴图,映射到扫描出的模型上
  • ¥15 魔霸ROG7 pro,win11.息屏后会显示黑屏,如图,如何解决?(关键词-重新启动)
  • ¥15 有没有人知道这是哪里出了问题啊?要怎么改呀?
  • ¥200 C++表格文件处理-悬赏
  • ¥15 Windows Server2016本地登录失败
  • ¥15 复合卡卡号轨道写入芯片卡