Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/237.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
对mock上未定义方法的PHPUnit错误调用_Php_Unit Testing_Mocking_Phpunit - Fatal编程技术网

对mock上未定义方法的PHPUnit错误调用

对mock上未定义方法的PHPUnit错误调用,php,unit-testing,mocking,phpunit,Php,Unit Testing,Mocking,Phpunit,我得到一个错误:当我在简单类Mock上调用mymethod()时,调用未定义的方法Mock\u SimpleInterface\u 8a93e777::mymethod() class PlaygroundTest extends \PHPUnit_Framework_TestCase { public function testMock() { $class = $this->getMockBuilder('\Playground\Simple'

我得到一个错误:当我在简单类Mock上调用mymethod()时,调用未定义的方法Mock\u SimpleInterface\u 8a93e777::mymethod()

class PlaygroundTest extends \PHPUnit_Framework_TestCase 
{
    public function testMock()
    {
        $class     = $this->getMockBuilder('\Playground\Simple')->getMock();

        $class->mymethod();
    }
}
简单的类实现

namespace Playground;

class Simple
{

    public function mymethod()
    {
        print "Hey!";
    }
}
根据PHPUnit docs(),它声明“默认情况下,原始类的所有方法都被一个只返回null(而不调用原始方法)的伪实现替换。”

我不应该调用mymethod()并获得一个空的返回值吗?我希望避免指定所有类方法。PHPUnit应该足够聪明,知道哪些方法可以在mock上调用或不调用


这是虫子吗?我使用的是PHPUnit 5.1.4

您的假设是正确的,因此您在其他地方有错误,或者没有显示真正的代码


mock类名
mock\u SimpleInterface_8a93e777
表明您实际上并不是在模拟
\playerly\Simple
,而是在模拟
\playerly\SimpleInterface
,它可能不包含
mymethod()。这不是一个错误,我用了很多次。一定有不同的原因。您正在将模拟分配给
$class
,但在
$interface
上调用
mymethod()
。这是真的吗?还是你问题中的一个错误?这是将我的代码复制到stackoverflow中的一个错误。在实际代码中,它实际上是在$class上调用的。(我也做了模拟接口的测试,这就是我错误复制代码的地方)。我会编辑。所以我只是复制并粘贴了你的代码,因为我看不到任何错误。我可以告诉你:没有。我没有收到任何错误:
OK(1个测试,0个断言)
是结果。问题一定是其他人。您是否有一个调用堆栈,可以用它来验证调用实际来自何处?另外:您使用哪个PHP版本?它在PHP7上。但是根据文档,phpunit5与php7是兼容的。我将在周一详细查看调用堆栈。是的,我也尝试过使用接口。我想我把测试中的stackoverflow代码与一个类和一个接口混合在一起(虽然结果相同),然后检查是否自动加载了不同版本的类。