Mockery和PHPUnit:此模拟对象上不存在方法
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Mockery和PHPUnit:此模拟对象上不存在方法,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1781字,纯文字阅读大概需要3分钟。
内容图文
![Mockery和PHPUnit:此模拟对象上不存在方法](/upload/InfoBanner/zyjiaocheng/746/6e1f50c9945d480b84adb4f0730fb643.jpg)
你能告诉我问题出在哪里吗?我有一个文件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()在此模拟对象上不存在.
解决方法:
错误消息对我来说似乎很清楚.您只设置了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:此模拟对象上不存在方法所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。