【发布时间】:2016-04-21 14:08:54
【问题描述】:
当我在 Simple 类模拟上调用 mymethod() 时出现错误:调用未定义方法 Mock_SimpleInterface_8a93e777::mymethod()。
class PlaygroundTest extends \PHPUnit_Framework_TestCase
{
public function testMock()
{
$class = $this->getMockBuilder('\Playground\Simple')->getMock();
$class->mymethod();
}
}
Simple 类实现
namespace Playground;
class Simple
{
public function mymethod()
{
print "Hey!";
}
}
根据 PHPUnit 文档 (https://phpunit.de/manual/5.1/en/test-doubles.html),它声明“默认情况下,原始类的所有方法都被替换为仅返回 null(不调用原始方法)的虚拟实现。”
难道我不能调用 mymethod() 并获得一个空返回值吗?我想避免指定所有类方法。 PHPUnit 应该足够聪明,知道哪些方法可以在 mock 上调用。
这是一个错误吗?我正在使用 PHPUnit 5.1.4
【问题讨论】:
-
你是对的。这不是一个错误,我用过很多次。一定有不同的原因。您将模拟分配给
$class,但在$interface上调用mymethod()。真的是这样还是你的问题有错误? -
将我的代码复制到stackoverflow是一个错误。在实际代码中,它确实在 $class 上被调用过。 (我也对模拟接口进行了测试,这就是我错误地复制了我的代码的地方)。我会编辑。
-
所以我只是复制并粘贴了您的代码,因为我看不到任何错误。我可以告诉你:没有。我完全没有错误:
OK (1 test, 0 assertions)是结果。问题必须是其他的。您是否有一个调用堆栈,您可以使用它来验证调用的实际来源? -
另外:您使用哪个 PHP 版本?
-
它在 PHP7 上。但是根据文档,尽管 PHPUnit 5 与 PHP 7 兼容。我会在星期一详细检查调用堆栈。
标签: php unit-testing mocking phpunit