Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/294.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHPUnit:如何通过测试中的方法模拟内部调用的函数_Php_Unit Testing_Mocking_Phpunit - Fatal编程技术网

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

PHPUnit:如何通过测试中的方法模拟内部调用的函数,php,unit-testing,mocking,phpunit,Php,Unit Testing,Mocking,Phpunit,在下面的示例中,我想模拟multipledvalue()中的getBaseValue()调用。但我想不出来 class Sample { function multipliedValue() { $value = $this->getBaseValue(); return $value * 2; } function getBaseValue() { return 2; } } 我用过PHPUnit嘲弄

在下面的示例中,我想模拟
multipledvalue()
中的
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);
  }
}
我试图创建一个全局函数,但只强制其中一个方法返回我想要的值,其余的就按原样执行。我应该如何进行这个测试


我当前遇到的错误是
multipledValue()
方法中的
$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);

这样做会导致错误
未定义的方法SampleTest::getBaseValue()
,因为
getBaseValue()
是由
multipledValue()
函数在内部调用的。不,您是对的。我犯了一个错误。非常感谢