Mockery和PHPUnit:此模拟对象上不存在方法

发布时间:2022-04-30 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了Mockery和PHPUnit:此模拟对象上不存在方法脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
你能告诉我问题出在哪里吗?我有一个文件Generatortest.PHP与以下测试:

<?PHP

namespace stats\Test;

use stats\jway\File;
use stats\jway\Generator;

class GeneratorTest extends \PHPUnIT_Framework_TestCase
{

    public function tearDown() {
        \Mockery::close();
    }

    public function testGeneratorFire()
    {
        $fileMock = \Mockery::mock('\stats\jway\File');
        $fileMock->shouldReceive('put')->with('foo.txt','foo bar')->once();
        $generator = new Generator($fileMock);
        $generator->fire();
    }

    public function testGeneratorDoesNotOverwriteFile()
    {
        $fileMock = \Mockery::mock('\stats\jway\File');
        $fileMock->shouldReceive('exists')
            ->once()
            ->andReturn(true);

        $fileMock->shouldReceive('put')->never();

        $generator = new Generator($fileMock);
        $generator->fire();
    }
}

这里是文件生成器类:

File.PHP

class File
{
    public function put($path,$content)
    {
        return file_put_contents($path,$content);
    }

    public function exists($file_path)
    {
        if (file_exists($file_path)) {
            return true;
        }
        return false;
    }
}

Generator.PHP

class Generator
{
    PRotected $file;

    public function __construct(File $file)
    {
        $this->file = $file;
    }

    protected function getContent()
    {
        // simplified for demo
        return 'foo bar';
    }

    public function fire()
    {
        $content = $this->getContent();
        $file_path = 'foo.txt';

        if (! $this->file->exists($file_path)) {
            $this->file->put($file_path,$content);
        }
    }

}

因此,当我运行这些测试时,我收到以下消息:BadMethodCallException:Method … :: exists()在此模拟对象上不存在.

Mockery和PHPUnit:此模拟对象上不存在方法

解决方法

错误消息对我来说似乎很清楚.您只设置了put方法的期望,但不存在.所有代码路径中的被测试类都调用exists方法.

public function testGeneratorFire()
{
    $fileMock = \Mockery::mock('\stats\jway\File');
    $fileMock->shouldReceive('put')->with('foo.txt','foo bar')->once();

    //Add the line below
    $fileMock->shouldReceive('exists')->once()->andReturn(false);

    $generator = new Generator($fileMock);
    $generator->fire();
}

脚本宝典总结

以上是脚本宝典为你收集整理的Mockery和PHPUnit:此模拟对象上不存在方法全部内容,希望文章能够帮你解决Mockery和PHPUnit:此模拟对象上不存在方法所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。