Mockery和PHPUnit:此模拟对象上不存在方法
发布时间:2020-12-13 21:55:43 所属栏目:PHP教程 来源:网络整理
导读:你能告诉我问题出在哪里吗?我有一个文件GeneratorTest.php与以下测试: ?phpnamespace statsTest;use statsjwayFile;use statsjwayGenerator;class GeneratorTest extends PHPUnit_Framework_TestCase{ public function tearDown() { Mockery::close
你能告诉我问题出在哪里吗?我有一个文件GeneratorTest.php与以下测试:
<?php namespace statsTest; use statsjwayFile; use statsjwayGenerator; class GeneratorTest extends PHPUnit_Framework_TestCase { public function tearDown() { Mockery::close(); } public function testGeneratorFire() { $fileMock = Mockery::mock('statsjwayFile'); $fileMock->shouldReceive('put')->with('foo.txt','foo bar')->once(); $generator = new Generator($fileMock); $generator->fire(); } public function testGeneratorDoesNotOverwriteFile() { $fileMock = Mockery::mock('statsjwayFile'); $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('statsjwayFile'); $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(); } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |