对mock上未定义方法的PHPUnit错误调用
我得到一个错误:当我在简单类Mock上调用mymethod()时,调用未定义的方法Mock\u SimpleInterface\u 8a93e777::mymethod()对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'
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代码与一个类和一个接口混合在一起(虽然结果相同),然后检查是否自动加载了不同版本的类。