PHPUnit 错误调用模拟上的未定义方法

标签 php unit-testing mocking phpunit

当我在 Simple 类模拟上调用 mymethod() 时,出现错误:调用未定义的方法 Mock_SimpleInterface_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 文档 ( https://phpunit.de/manual/5.1/en/test-doubles.html ),它指出“默认情况下,原始类的所有方法都被替换为仅返回 null 的虚拟实现(不调用原始方法)。”

我不应该能够调用 mymethod() 并获得 null 返回值吗?我想避免指定所有类方法。 PHPUnit 应该足够聪明,知道哪些方法可以在模拟上调用,哪些方法不能调用。

这是一个错误吗?我正在使用 PHPUnit 5.1.4

最佳答案

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

模拟类名Mock_SimpleInterface_8a93e777表明您实际上并不模拟\Playground\Simple而是\Playground\SimpleInterface,这可能不包含mymethod()

关于PHPUnit 错误调用模拟上的未定义方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34820260/

相关文章:

c# - 对 ASP.Net Web 应用程序的 App_Code 进行单元测试

java - Spring Rest 模板用 Spock 进行模拟

java - 使用 Mock when 方法

php - PHP中遍历多维数组的递归方法

php - 如何从 PHP 创建 MySQL 存储过程?

ruby-on-rails - 使用 rspec 测试 Rails STI 子类

php - Laravel & mock : Unit testing the update method without hitting the database

php - innodb中的并发

php - CakePHP 语法从 $Auth 检索关联字段

c# - 为了最小化测试范围内的单元,我是否应该在单元测试时始终使用 Mocks